递归算最长公共子串,简单暴力,代码少!

公共子串计算

http://www.nowcoder.com/questionTerminal/98dc82c094e043ccb7e0570e5342dd1b

import java.util.*;

public class 公共子串计算 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            String str1=sc.nextLine();
            String str2=sc.nextLine();
            char[] c1= str1.toCharArray();
            char[] c2=str2.toCharArray();
            List<Integer> list=new ArrayList<>();

            for (int i=0;i<c1.length;i++){ //扫描每个字符,若能匹配上,就开始递归算重合部分的序列长度
                for (int j=0;j<c2.length;j++){
                    if (c2[j]==c1[i]){//经过扫描,每次第一个字母对上就开始递归
                        list.add(howmanybit(c1,c2,i,j));//往集合里添加重合字符串的长度
                    }
                }
            }
            //Collections.sort(list);//排序,找到最大的数就是最长的公共子串
            Collections.sort(list, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2-o1;
                }
            });
            System.out.println(list.get(0));
            list.clear();
        }
    }

    public static  int howmanybit(char[] c1,char[] c2,int i,int j){
        if(i>=c1.length||j>=c2.length||c1[i]!=c2[j]){
            return 0;
        }
        else {
            return 1 + howmanybit(c1, c2, i + 1, j + 1);
        }
    }
}
全部评论

相关推荐

喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务