码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 14 最长公共子串

时间:2020-04-03 21:59:00      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:bool   结束   problem   show   tps   水平   span   cli   max   

原题点这里

 

水平扫描:依次取每个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;


    }

 

leetcode 14 最长公共子串

标签:bool   结束   problem   show   tps   水平   span   cli   max   

原文地址:https://www.cnblogs.com/superxuezhazha/p/12628903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!