算法思路:

本题我的心得是不用观察中间状态,即不需要每一步都判断当前是否是公共前缀。只需要在第一次出现不是公共前缀时他的上一个状态就一定是最长公共前缀。同时我们也无需取最短字符串,只需要在遍历时多加一个长度判断即可,即如果当前遍历到的第j列中j等于某个字符串的长度,那么就可判断此时已经到这个字符串最后一位也直接返回即可。于是代码如下:
cpp
class Solution {
public:
//第一次不同前的就是最长公共前缀
string longestCommonPrefix(vector<string>& strs) {
string& s0 = strs[0];
for(int j = 0;j<s0.size();j++){
//j相当于从左往右遍历
for(string& s:strs){
//相当于遍历判断每个字符串
if(j == s.size() || s[j] != s0[j]){
return s0.substr(0,j);
}
}
}
return s0;
}
};