LeetCode14-最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
一、思路
(一)直接遍历法
算法流程:
(1)从任意一个字符串中,取出第一个字符
(2)将这个字符与其他字符串中的对应的字符进行匹配
(3)所有匹配成功,取下一个字符,再进行匹配
(4)如此循环,直到下一个匹配不成功为止,停止循环
以为很简单的题目,结果多次执行出错,总结易错点:
(1)出错1
这里只考虑到了两个以上的字符串的情况
(2)出错2
未考虑字符串访问过程中,是否会出现越界
(3)出错3
考虑(2)的时候,只考虑了一个字符串
C++代码
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
switch (strs.size()) {
case 0:
return "";
case 1:
return strs[0];
default:
int i = 0, len = 0, len_max = strs[0].size(), flag = 0, j;
char c;
for (i = 0; i < strs[0].size(); i++) {
c = strs[0].at(i);
for (j = 1; j < strs.size(); j++) {
if (strs[j].size() == 0)
return "";
if (len == strs[j].size())
return strs[0].substr(0, len);
if (c != strs[j].at(i)) {
flag = 1;
break;
}
}
if (flag)
break;
len++;
}
return strs[0].substr(0, len);
}
}
};
执行效率: