问题描述:给定两个字符串,求出它们之间最长的相同子字符串的长度,如“abcdefg”和“adefgwgeweg”的最长公共子串为“defg”(子串必须是连续的)。
程序要求:输入两个字符串,输出两个字符串的最长公共子串。
实现代码:
import java.util.*;
import java.lang.*;
public class longestson {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
String a;
String b;
a=input.nextLine();
b=input.nextLine();
String result="";
result=maxSubstring(a,b);
System.out.println(result);
}
//该程序的思路是根据substring函数,一个个的遍历其子串,从而找出最长的共有子串
public static String maxSubstring(String a,String b) {
String result="";
String maxstring=null;
String minstring=null;
int shortest=0;
if(a.length()>b.length()) {
maxstring=a;
minstring=b;
shortest=b.length();
}
else {
maxstring=b;
minstring=a;
shortest=a.length();
}
//从最长的子串开始遍历,找不到再找第二长的子串看其是否包含于另一字符串中,以此类推,直到得到第一个结果便为最 //长公有串
for(int i=0;i<shortest;i++) {//遍历短的那方的子串
for(int start=0,end=shortest-i;end<=shortest;end++,start++) {
String temp = minstring.substring(start, end);
if(maxstring.contains(temp)){
return temp;
}
}
}
return result;
}
}