40 最大相同子串
作者: Turbo时间限制: 1S章节: 字符串
问题描述 :
输入两个字符串,获取两个字符串中最长相同子串并输出。
如果有多个相同子串,则输出(按ASCII排序)最小的那个“最长相同子串”。
如果无相同子串,则输出空字符串(即空行)。
输入说明 :
输入多组测试数据,每组测试数据包含两行。
每行包含一个字符串,字符串中无空格,也无空字符串。
输出说明 :
对于每组测试数据,输出最长子串。如果最长子串为空,则输出一个空行。
每组输出占一行,行首与行尾无多余空格,也无多余空行。
输入范例 :
abcded123456aabbcc
abcdaa1234
abcdabcdabcd
abcda
输出范例 :
1234
abcda
import java.util.Scanner;
public class test_40 {
/**
* 40 最大相同子串
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1,s2,maxStr,temp;
while(sc.hasNext()){
maxStr="";
s1 = sc.next();
s2 = sc.next();
for (int i = 0; i < s2.length()-1; i++) {
for (int j = i+1; j <s2.length(); j++) {
//取不到最后一位,不包含最后索引位置
temp = searchMaxStr(maxStr,s2.substring(i,j),s1);
maxStr = temp;
}
}
//最长子串包含最后一位的情况
for (int i = 0; i < s2.length(); i++) {
temp = searchMaxStr(maxStr,s2.substring(i),s1);
maxStr = temp;
}
if(maxStr.length()==0){
System.out.println();
}else {
System.out.println(maxStr);
}
}
}
public static String searchMaxStr(String maxLen,String temp,String source){
if(source.indexOf(temp)!=-1){
if(maxLen.length()<temp.length()){
maxLen = temp;
}
if(maxLen.length() == temp.length() && maxLen.compareTo(temp)>0){
maxLen = temp;
}
}
return maxLen;
}
}