leetcode14最长公共前缀

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        
        if(strs.size()==0) return "";
        if(strs.size()==1) return strs[0];
        string com_str=strs[0];
        for(auto i=strs.begin();i<strs.end();i++)
        {
            while((*i).find(com_str,0)!=0)
            {
                com_str=com_str.substr(0,com_str.size()-1);
                if(com_str.size()==0) return "";
            }
        }
         return com_str;
    }
};

算法二:水平扫描
算法


想象数组的末尾有一个非常短的字符串,使用上述方法依旧会进行 S​S​ 次比较。优化这类情况的一种方法就是水平扫描。我们从前往后枚举字符串的每一列,先比较每个字符串相同列上的字符(即不同字符串相同下标的字符)然后再进行对下一列的比较。

//水平扫描

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        
        if(strs.size()==0) return "";
        if(strs.size()==1) return strs[0];
        string com_str=strs[0];
        for(int i=0;i<com_str.size();i++)
        {
           char c=com_str[i];
           for(int j=1;j<strs.size();j++)
           {
               if(strs[j].size()==i||strs[j][i]!=c)
                    return com_str.substr(0,i);
           }
        }
         return com_str;
    }
};

 
原文地址:https://www.cnblogs.com/renzmin/p/11867823.html