递归算最长公共子串,简单暴力,代码少!
公共子串计算
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); } } }