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