简单实现,一个一个挨着往后比

python版本

class Solution:
    def getPub(self, str1, str2):
        j = 0
        while j < min(len(str1), len(str2)):
            if str1[j] != str2[j]:
                break;
            j+=1
        return str1[:j]
    
    def longestCommonPrefix(self , strs: List[str]) -> str:
        # write code here
        if len(strs) == 0:
            return ''
        pub_str = strs[0]
        if len(strs) == 1:
            return pub_str
        for i in range(1, len(strs)):
            if not len(pub_str):
                return pub_str
            pub_str = self.getPub(pub_str, strs[i])
        return pub_str

c++版本

class Solution {
public:
    /**
     * 
     * @param strs string字符串vector 
     * @return string字符串
     */
    string longestCommonPrefix(vector<string>& strs) {
        // write code here
        int i, j, s_size = strs.size();
        string pub_str="";          //初始化公共字符串
        if(!s_size) return pub_str;  //如果strs为空,直接return
        pub_str = strs[0];           //如果不为空,将第一个字符串赋给pub_str
        if(s_size == 1) return pub_str;  //如果就一个字符串,直接返回
        for(i=1; i<s_size; i++){  //如果不止一个,从第一个开始挨着往后比
            int min_len = min(pub_str.size(), strs[i].size());  //比较两个字符串哪个短,按照短的长度去循环
            for(j=0; j<min_len; j++){
                if(pub_str[j] != strs[i][j]) break;    //出现不等的直接退出
            }
            pub_str = pub_str.substr(0, j);
        }
        return pub_str;
    }
};