题目描述:编写一个函数来查找字符串数组中的最长公共前缀。
string longestCommonPrefix(vector<string>& strs) {
bool st = true;
int i = 0;
string ans;
while(st){
set<char> setting;
for(auto r:strs){
if(r.size()>i) setting.insert(r[i]);
else{
st = false;
break;
}
}
if(st&&setting.size()==1) {
ans+=strs[0][i];
i++;
}
else
return ans;
}
return ans;
}
进行纵向循环,每次将每一个字符串的第i个字符放到set中,并判断set的元素个数,若为1,则说明均相同,否则返回。
这个方法与官网上的纵向比较法相同,时间复杂度O(S),S表示字符总个数,最坏情况进行n*m次比较,空间复杂度感觉和题解有区别。
另外题解还提供了分治,二分,字典树等多种方法