string longestCommonPrefix(vector<string>& strs) {
int N = strs.size();
if (N == 0) return ""; //特殊情况处理(关键)
if (N == 1) return strs[0];//特殊情况处理
string prefix = strs[0]; //刚开始假设前缀就是第一个字符串
int end= prefix.size(); //前缀字符串的结尾下标
for (string& s : strs) {
int i=0, j=0; //双指针,分别遍历前缀串和字符串
while (i < prefix.size() && j < s.size()) {
if (prefix[i] == s[i]) { //如果和前缀字符串相等,指针前进
i++;
j++;
}
else {
end = min(end, i); //否则,前移前缀指针,前缀字符串变短
break;
}
}
//考虑退出循环的情况,取end和i,j的较小值,end指针只能前移(因为是公共前缀)
if (i == prefix.size()) end=min(end, i);
if (j == s.size()) end = min(end, j);
}
return prefix.substr(0, end);
}
LeetCode No.14. 最长公共前缀
最新推荐文章于 2021-08-25 14:33:09 发布