您的位置:首页 > 其它

查找两个字符串a,b的最长公共子串

2016-08-28 15:56 435 查看
       对于两个字符串a、b,开辟一个大小为[a.length()+1][b.length()+1]的二维整型数组,初始化第一行和第一列为0,对于其他的每一个a[i][j],如果字符串a的第i个字符与字符串b的第j个字符相等,那么a[i][j]=a[i-1][j-1]+1,否则a[i][j]=0。

import java.util.Scanner;

public class Main{

public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String s1=scanner.next();
String s2=scanner.next();
String common=getCommonString(s1,s2);
System.out.println(common);
}

public static String getCommonString(String s1, String s2) {
int m=s1.length();
int n=s2.length();
int max=0;
int pos=-1;
int[][] a=new int[m+1][n+1];
for(int i=1;i<m+1;i++){
for(int j=1;j<n+1;j++){
if(s1.charAt(i-1)==s2.charAt(j-1)){
a[i][j]=a[i-1][j-1]+1;
if(a[i][j]>max){
max=a[i][j]; //记录最长子串长度
pos=i-1; //记录最长子串的最后一个字符位置
}
}else{
a[i][j]=0;
}
}
}
if(max!=0){ //返回最长子串
return s1.substring(pos-max+1,pos+1);
}
return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串 公共子串