编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""
。示例 1:
输入: ["flower","flow","flight"] 输出: "fl"示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。说明:
所有输入只包含小写字母
a-z
。
解法一
//时间复杂度O(m*n), 空间复杂度O(1)
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size() == 0) return "";//如果strs为空, 返回
for(int i = 0; i < strs[0].length(); i++) {//遍历第一行的每一列
char c = strs[0][i];//记录第一行元素
for(int j = 1; j < strs.size(); j++) {//遍历每一行
if( (i == strs[j].length()) ||
(strs[j][i] != c) ) {
return strs[0].substr(0, i);
}//该行到末尾 或 该行字符不相同
}
}
return strs[0];
}
};
大体思路:
- 根据第一行每一个字符,按列遍历;
- 如果遇到不相同的字符,或者到达某一字符串的结尾,立即返回。