1 采用纵向比较的方法,即以这个字符串数组的第一个字符串作为参照对象,纵向就是同时比较每个字符串的同样位置上的元素是否相同,所以外部循环负责控制走到哪个位置了,内部循环就把后面要比较的每个字符串的当前位置上的元素拿出来比较。
循环结束也就是不比了结束了的条件是,要么找到了LCP,也就是到了一个有元素大家有不同的位置上,那就返回这个位置之前的所有字符;要么就是找完了,走到要比较的字符串末尾了。如果是第一个被参照的字符串先走到末尾,那这个字符串本身就是LCP呀。
2 考虑的几个特殊情况:字符串数组为空,即不存在最长公共前缀(LCP),返回“”;
字符串数组只有一个字符串,LCP就是其本身哦!因为这个函数有返回类型,所以别忘了这个情况;
每个字符串都不没有相同的,无LCP,返回“”,但是如果返回substr(0,0),其实就是“”。
3 substr(a,b)取字符串中下标范围[a,b)(跟python很像)
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==0){
return "";
}
string res;
for(int i=0;i<strs[0].size();i++){
char c=strs[0][i];
for(int j=1;j<strs.size();j++){
if(c!=strs[j][i]||i==strs[j].size()){
res=strs[0].substr(0,i);
return res;
}
}
}
return strs[0];
}
};