首先可以肯定的是这个最长的字符序列只可能存在于短的字符串中,然后我把你的问题转换成求一个短字符串的子字符串的过程(比如一个字符串有3位,那么它的子字符串只可能有3+2+1位),然后再用indexOf方法来循环遍历。我的算法是把每个方法独立开来,这样有一点不好,就是当你得到最长的字符串的时候,其他的子字符串是白求了,你自己看看吧。 import java.util.*;public class MaxString { static String[] sonString; //存储子串的数组,长度是该字符串长度的阶乘 static List<String> list = new ArrayList<String>(); //存储最长子串的列表 static int max = 1; //记录最长子串的长度
public static int sum(int i){ if (i == 1) return 1; else return sum(i-1) + i; }
public static String[] sonstring(String str){ //求短字符串的子串 sonString = new String[sum(str.length())]; int k = str.length(); int count = 0;
int length=0; for(int i=0;i<A.length();i++) {
index=0;
for(int j=0;j<B.length;j++) {
while(true) {
if(A.charAt(i)==B.charAt(j)) {
index++;
i=i+1;
j=j+1;
}else{
if(length<index) length=index;
break;
}
}
}
}
import java.util.*;public class MaxString {
static String[] sonString; //存储子串的数组,长度是该字符串长度的阶乘
static List<String> list = new ArrayList<String>(); //存储最长子串的列表
static int max = 1; //记录最长子串的长度
public static int sum(int i){
if (i == 1)
return 1;
else
return sum(i-1) + i;
}
public static String[] sonstring(String str){ //求短字符串的子串
sonString = new String[sum(str.length())];
int k = str.length();
int count = 0;
for(int i=0; i<k; i++){
for(int j=k-1; j>=i; j--){
sonString[count] = str.substring(i, j+1);
count ++;
}
}
return sonString;
}
public static List<String> findMax(String longStr, String shortStr){
sonstring(shortStr);
for(int i=0; i<sonString.length; i++){
if (longStr.indexOf(sonString[i]) >= 0){
if (sonString[i].length() > max){
list.clear();
max = sonString[i].length();
list.add(sonString[i]);
}
else if (sonString[i].length() == max){
list.add(sonString[i]);
}
}
}
return list;
}
public static void main(String args[]){
String str1 = "abcdldedad";
String str2 = "abdled33s";
findMax(str1, str2);
System.out.print(list.toString());
}
}
结果:[ab, dl, ed]