在做leetcode字符串最大公共前缀的时候,整体思路可能不是很优秀,但是正确的,但提交了好多次,其中最重要的原因是没有处理退化的情况;第二个原因就是在少分析了else的情况,详细信息见代码。
class Solution
{
public:
string longestCommonPrefix(vector<string>& strs)
{
//处理退化的情况,在这里出了很多错,需要注意。
if (strs.size()==0)
return "";
if (strs.size()==1)
return strs[0];
//先比较前两个,得到一个初始的公共前缀
string result="";
int shortersize = (strs[0].size()<strs[1].size())?strs[0].size():strs[1].size();
if(shortersize)
{
for (int i = 0;i!=shortersize;++i)
{
if(strs[0][i]!=strs[1][i])
break;
else
{
result += strs[0][i];
}
}
}
//遍历strs后续的字符串
int Nsize = result.size();
if(Nsize)
{
for (int j=2;j!=strs.size();++j)
{
string now = strs[j];
shortersize = (result.size()<now.size())?result.size():now.size();
int k = 0;
if(shortersize)
{
while(1)
{
if(result[k]!=now[k])
break;
++k;
}
result = result.substr(0,k);
}
else //这个else一定要加,不然返回的直接就是前两个比较的结果,很重要
return "";
}
}
return result;
}
};