题目14:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
分析与代码
分析:
怎么说呢,历尽了千辛万苦,调试了三四遍才通过所有案例。自己的思路总没有覆盖所有的案例,本地调试是一个很好地办法。
第一遍是temp这个初始值设置有问题,太过固定;主要出错代码:char temp = strs[0][i];
第二遍是不存在公共前缀的字符检测有误,因为没考虑到所有的情况;主要出错代码:r += temp;
的位置问题
第三遍是长公共前缀检测有误;主要出错代码:else return r;
代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
class Solution {
public:
string longestCommonPrefix(vector<string>& strs)
{
int len = strs.size();
string r = "";
//特殊处理
if(strs.empty())
return r;
int count = strs[0].size();//最小字符串的长度
for(int i=0;i<len;i++)
{
if(strs[i].size()<=0)
return r;
else
{
if(strs[i].size()<count)
count = strs[i].size();
}
}
for(int i=0;i<count;i++)
{
char temp = strs[0][i];
for(int j=1;j<len;j++)
{
if(temp == strs[j][i])
temp = strs[j][i];
else
return r;
; }
r += temp;
//else
// break;
}
return r;
}
};
int main()
{
Solution a;
string s[3] = {"abca","abc"};
vector<string> str(s, s+2);
string r = a.longestCommonPrefix(str);
for(int i=0;i<r.size();i++)
{
cout<<r[i];
}
return 0;
}