思路优化,本来是把第一个字符串的长度作为初始预估prefix值。后来看到别人写的,还是觉得提前循环一遍,找到最短的字符串的长度作为prefix的长度预估值。
双层循环:
外层循环,用下图横着做,开始都是str[j][0]---str[j][1]---str[j][minlen-1]
内层循环,用下图竖着做,大家都是第一个字符,看看一样吗,不一样则break。
如果跳出的循环式i==len,就是说是自然遍历完全后退出,因此在结果字符串上增加当前指向字符;
如果跳出循环的i!=len,就是说是break出来的。则出现不一致的前缀了,则放弃当前字符。跳出外层循环。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
//strs={"dog","racecar","car"};
string ans;
if(strs.empty()) return ans;
int len=strs.size();
if(len==1) return strs[0];
int i,j;
char tmp;
j=0;
int minlen=strs[0].size();
for(i=1;i<=len-1;i++)
{
if(strs[i].size()<minlen) minlen=strs[i].size();
}
for(j=0;j<=minlen-1;j++)
{
tmp=strs[0][j];
for(i=1;i<=len-1;i++)
{
if(strs[i][j]!=tmp) break;
}
if(i!=len) break;
else
ans+=tmp;
}
return ans;
}
};