我的代码:(4ms)
/*好像又加了数据,结果RE了。*/
class Solution { public: string longestCommonPrefix(vector<string>& strs) { string res=""; if(strs.empty()){ return res; } for(int j=0;j<strs[0].size();j++){ for(int i=0;i<strs.size();i++){ if((i+1!=strs.size())&&strs[i][j]!=strs[i+1][j]){ return res; } } res+=strs[0][j]; } return res; } };
改正之后的代码:先找出一个最短的。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Solution { public: string longestCommonPrefix(vector<string>& strs) { string res=""; if(strs.empty()){ return res; } int lens=strs[0].size(); for(int i=1;i<strs.size();i++){ if(strs[i].size()<lens){ lens=strs[i].size(); } } for(int j=0;j<lens;j++){ for(int i=0;i<strs.size();i++){ if((i+1!=strs.size())&&strs[i][j]!=strs[i+1][j]){ return res; } } res+=strs[0][j]; } return res; } };
最快:(0ms)
class Solution { public: string longestCommonPrefix(vector<string>& strs) { if(strs.empty()) return ""; int n=strs.size(); string s=strs[0]; for(int i=1;i<n;i++){ if(s.length()>strs[i].length()) s=s.substr(0,strs[i].length()); for(int j=0;j<s.length();j++) if(s[j]!=strs[i][j]){ s=s.substr(0,j); break; } } return s; } };
这是另一种方法。我的是,外层遍历字符串,内层遍历字符串数组。这个是反过来。