思路优化,本来是把第一个字符串的长度作为初始预估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; } };