Problem
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例
输入 | 输出 | 解释 |
---|---|---|
[“flower”,“flow”,“flight”] | “fl” | 公共前缀fl |
[“dog”,“racecar”,“car”] | “” | 没有相同前缀,返回"" |
所有输入只包含小写字母 a-z 。
Solving
按序对比法
把第一个作为公共前缀,与第二个对比,找到两者的公共前缀;再和下一个字符串对比,更新公共前缀!直到最后一个或者没有公共前缀为止。
Code(c++)
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.size() == 0) // 空列表返回空字符串
return "";
int strlength = strs[0].length();
string maxres = strs[0]; // 把第一个字符串作为初始公共字符串
for(int i = 1; i<strs.size(); ++i){ // 从第二个字符串开始对比
strlength = min(strs[i].length(), maxres.length()); // 获取较短字符串的长度
if (!strlength) // 如果存在空字符串返回空
return "";
int flag = 1; // 正常退出循环标志
for(int j=0; j<strlength; ++j){
if (strs[i][j] != maxres[j]){ // 依次对比,遇到不同立即终止,缩减公共前缀,对比下一个
maxres = maxres.substr(0, j);
flag = 0;
break;
}
if (flag)
maxres = maxres.substr(0, strlength);
}
}
return maxres;
}
};
执行用时 :16 ms
内存消耗 :21 MB