字符串的最长公共前缀
先写以个两个string比较的,之后O(n)在vector中滑动比较
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int i = 1;
string com_s;
if(strs.size()==0) return string("");
if(strs.size()==1) return strs[0];
com_s = strs[0];
while(i!=strs.size())
com_s = check_two(com_s,strs[i++]);
return com_s;
}
string check_two(string &s1, string &s2){
int i;
for(i = 0; i != min(s1.size(),s2.size()); ++i)
if(s1[i]!=s2[i])
break;
return s1.substr(0,i);
}
};
当然用c写也是可以的check_two部分找到不相同的字符时要注意是否为\0,是\0就可以直接返回s1,没有到达\0将其变成\0即可
#define min(x,y) (x)<(y)?(x):(y)
char* check_two(char *s1, char *s2){
int i =0;
char *tmp;
if(strlen(s1)>strlen(s2)){
tmp = s1;
s1 = s2;
s2 = tmp;
}
for(i = 0; i != strlen(s1); ++i)
if(s1[i]!=s2[i])
break;
if(i!=strlen(s1))
s1[i] = '\0';
return s1;
}
char* longestCommonPrefix(char** strs, int strsSize) {
if(strsSize==1) return strs[0];
if(strsSize==0) return "";
char *com_s = strs[0];
int i =1;
while(i!=strsSize)
com_s = check_two(com_s,strs[i++]);
return com_s;
}