首先想到了纵向扫描,也确实是这样实现的
思路即比较每个字符串对应位置字符是否相等。
这种方法应该是最容易想到的,反正就是暴力求解
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int sz=strs.size();
if(sz==0)
return "";
if(sz==1)
return strs[0];
string result="";
vector<int>points(sz,0);
for(int i=0;i<strs[0].size();++i){
int isequal=1;
char c=strs[0][i];
for(int j=1;j<sz;++j)
if(i>=strs[j].size()||strs[j][i]!=c)
return result;
result+=c;
}
return result;
}
};
然后看了下各路大神的解释
1.横向扫描
保存第一个字符串作为起始数据s,然后向后依次和每个字符串比较,和字符串逐个字符比较时遇到不同的就把s中相同的保留下来,后面不同的截掉,直至和最后一个字符串比较完成或者s变为空。最后s即为最长公共前缀
2.二分查找
找到所有字符串中最短的那个,然后比较其中间字符与其他字符串中对应位置的字符是否相同,直至找到最长公共前缀。
3.分治法(虽然我感觉不太适合解此问题,不过真的是长见识了)
可以将其分解成两个子问题,这两个子问题的结果的最长公共前缀即为所有字符串的最长公共前缀,同理,子问题又可以分解为子问题,直至每个子问题都是一个字符串。
*********以上四种都是官方给出的题解
4.排序
评论区思路:给左右字符串排序,只需找首尾两个字符串的最长公共前缀即可!!!!