思路
- 特判:如果参数strs的长度为0, 则直接返回空字符串("");
- 设字符串res为最终要返回的公共前缀, res初始化为strs[0];
- 循环比较res和其余的各个字符串
- 设len为当前字符串strs[i]和res中的较小者:
- 从0~len依次比较res和strs[i]中的字符, 设前比较的位置为j(初始为0)
- 如果res[j] == strs[i][j], 则继续比较;
- 否则跳出循环
- 循环结束时,如果j == 0, 则说明strs[i]和res的第一个字符都不相等,则strs中所有的字符串无公共前缀;否则更新res,更新规则是res和strs[i]中相等部分的较短的串。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size() == 0)
return "";
string res = strs[0];
for(int i = 1; i < strs.size(); ++i) {
int len = std::max(strs[i].size(), res.size());
int j = 0;
while(len >= 0) {
if(strs[i][j] == res[j]) {
++j;
--len;
} else {
break;
}
}
if(j == 0)
return "";
res = res.size() > j ? strs[i].substr(0,j): res;
}
return res;
}
};