美文网首页
14. Longest Common Prefix

14. Longest Common Prefix

作者: 碗里的大粉条 | 来源:发表于2017-12-25 11:40 被阅读0次
  1. 讨论区里的:
    //Sort the array first, and then you can simply compare the first and last elements in the sorted array.
    public String longestCommonPrefix(String[] strs) {
        StringBuilder result = new StringBuilder();
        
        if (strs!= null && strs.length > 0){
        
            Arrays.sort(strs);
            
            char [] a = strs[0].toCharArray();
            char [] b = strs[strs.length-1].toCharArray();
            
            for (int i = 0; i < a.length; i ++){
                if (b.length > i && b[i] == a[i]){
                    result.append(b[i]);
                }
                else {
                    return result.toString();
                }
            }
        return result.toString();
    }

想想实际上就利用了字符串排序的规则。相同的前缀比较完了之后比较不同的。所以有相同前缀的肯定是在一起的。
能想到这种算法真的好有意思啊!!

  1. 我的直接粗暴思路:
string longestCommonPrefix(vector<string>& strs) {
        if (strs.size()==0){
            return "";
        }
        for(int i=0;i<strs[0].size();i++){
            string s0=strs[0].substr(i,1);
            for(int j=0;j<strs.size();j++){
                if(strs[j].substr(i,1)!=s0||strs[j].size()==i)
                    return strs[0].substr(0,i);     
            }
        }
        return strs[0];
    }

一个个字母比较过去。
不知道排序的算法是怎样的,应该时间复杂度差不多我觉着。

  1. 最后Java中有indexOf的函数。
public String longestCommonPrefix(String[] strs) {  
    if (strs.length == 0) return "";  
        String pre = strs[0];  
    for (int i = 1; i < strs.length; i++)  
        while(strs[i].indexOf(pre) != 0)  
            pre = pre.substring(0,pre.length()-1);  
    return pre;  
}  

相关文章

网友评论

      本文标题:14. Longest Common Prefix

      本文链接:https://www.haomeiwen.com/subject/rtqlgxtx.html