leetcode 14 最長公共子串


原題點這里

 

水平掃描:依次取每個str的第i個字符,若相同,則公共子串+1,否則結束。

public static String longestCommonPrefix(String[] strs) {

        int strNum = strs.length;
        if(strNum==1) return strs[0];
        int minLen = Integer.MAX_VALUE;
        for(int i=0;i<strs.length;i++)
            minLen=Math.min(minLen,strs[i].length());
        StringBuilder res = new StringBuilder("");
        for(int i=0;i<minLen;i++){
            boolean flag=true;
            char c = strs[0].charAt(i);
            for(int j=1;j<strNum;j++){
                if(strs[j].charAt(i)!=c){
                    flag=false;
                    break;
                }
            }
            if(flag){
                res.append(c);
            }else{
                break;
            }
        }
        return res.toString();
    }
View Code

 

JAVA有個類庫,可以直接在一個字符串中,找到另一個字符串  indexOf() ,這樣的我們依次取最大子串就可以:

LCP(S1​…Sn​)=LCP(LCP(LCP(S1​,S2​),S3​),…Sn​)

所以我們可以這樣:

    public String longestCommonPrefix(String[] strs) {
        if (strs.length == 0) return "";
        String prefix = strs[0];
        for (int i = 1; i < strs.length; i++)
            while (strs[i].indexOf(prefix) != 0) {
                prefix = prefix.substring(0, prefix.length() - 1);
                if (prefix.isEmpty()) return "";
            }        
        return prefix;


    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM