题目描述:
思路1:首先将字符串数组中的所有字符串排序,然后比较头和尾两个字符串的公共前缀即可。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty()) return string();
//对所有字符串进行排序
sort(strs.begin(), strs.end());
string st = strs.front(), en = strs.back();
int i, num = min(st.size(), en.size());
//遍历获得公共前缀
for(i = 0; i < num && st[i] == en[i]; i ++);
return string(st, 0, i);
}
};
思路2:首先比较第一个字符串与第二个字符串,得到公共前缀prefix,然后将prefix与第三个字符串比较,更新公共前缀,直至最后。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty()) return "";
string prefix=strs[0];
for(int i=1;i<strs.size();i++){
//遍历寻找公共前缀
prefix=longestCommonPrefix(prefix,strs[i]);
if(prefix.size()==0)
break;
}
return prefix;
}
//返回两个字符串的公共前缀
string longestCommonPrefix(string &str1,string &str2) {
int size=min(str1.size(),str2.size());
int i;
for(i=0;i<size;i++){
if(str1[i]!=str2[i])
break;
}
return str1.substr(0,i);
}
};