【Leetcode】14、最长公共前缀解法总结(c++)
qyczcm
2022年02月02日 16:26
收录于文集
共6篇

方法一:纵向扫描

思路:先获取字符串个数和最短字符串长度,然后从前往后遍历所有字符串的每一列,比较字符是否相投。

class Solution {

public:

    static string longestCommonPrefix(vector<string>& str) {

        if (!str.size()){

            return "&#​34;;

        }

        int min_length = str[0].size();

        int count = str.size(); //字符串个数

        for(int i = 1;i < count; ++i){

            if(str[i].size()<=min_length){

                min_length = str[i].size()+1;//加一一开始漏了,没有考虑到位

            }

        }

        //cout << min_length <<endl;

        for(int i = 0;i < min_length;++i){

            char c = str[0][i];

            for(int j = 1; j <count ; ++j){

                if(str[j][i]!=c){

                    return str[0].substr(0,i);

                }

            }

        }

        return str[0];

    }

};

 

方法二:横向扫描

写不动了,以后补

 

方法三:字典序

思路:将字符串数组以字典序排序,然后遍历比较第一个和最后一个字符串的字符,可得最长前缀。

class Solution {

public:

    static string longestCommonPrefix(vector<string>& str) {

        sort(str.begin(),str.end());

        string &s1=str.front();

        string &s2=str.back();

        cout << s1 <<endl;

        int i=0;

        while(i<s1.size()&&i<s2.size()&&s1[i]==s2[i]){

            ++i;

        }

        return string(s1.begin(),s1.begin()+i);

    }

};

附测试主函数:

int main()

{

    vector<string> str = {"flower&#​34;,"flight&#​34;,"flow&#​34;};

    string ret = Solution::longestCommonPrefix(str);

    cout << ret << endl;

    return 0;

}