思路:
1.取得两个字符串中相对较短的一个,记作s2,较长的字符串记作s;
2.判断s2是否为s的子串,如果是,直接输出,如果不是,执行下边的代码
3.对s2进行截取,从s2[0]截取到s2.length(),s2.length()-1,s2.length()-2直至s2[1];
从s2[1]截取到s2.length(),s2.length()-1,s2.length()-2直至s2[2];
从s2[2]截取到s2.length(),s2.length()-1,s2.length()-2直至s2[3];
从s2[2]截取到s2.length(),s2.length()-1,s2.length()-2直至s2[3];
........
需要嵌套for循环实现
需要嵌套for循环实现
4.判断截取到的子串是否为s的子串
如果是,则将该子串放入一个字符串数组sonArray中
如果遍历之后,所有子串均不是s的子串,则判断这两个字符串不存在相同子串
5.遍历sonArray数组,将数组中元素长度最大的赋值给该数组第一个元素sonArray[0]
6.打印输出sonArray[0],即两个字符串的最大相同子串
public class sonStringDemo {
public static void main(String[] args) {
sonStringOperation();
}
private static void sonStringOperation() {
String s2 = "asdfkljasdCCTVCCTVfioejsdfunbsdfhh";
String s = "asdfkasdiCCTVCCTVufasdfjh";
String temp; // 用来交换字符串,使s.length()>s2.length
String s3;// 用于存储截取后的字符串
if (s.length() < s2.length()) {//比较s与s2长度,将较长的字符串赋给s
temp = s2;
s2 = s;
s = temp;
}
int count = s2.length();//将较短字符串的长度赋值给count
int sum = (count + 1) * count / 2;//计算得出所有可能结果的最大值sum
String[] sonArray = new String[sum];//分配sum个空间给sonArray数组
int arrIndex = 0;//sonArray数组下标
if (s.indexOf(s2) != -1) {//如果s2为s的子字符串
System.out.println("最大子字符串为" + s2);
} else if (s.indexOf(s2) == -1) {
for (int i = 0; i < s2.length(); i++) {
for (int j = s2.length(); j > i; j--) {
s3 = s2.substring(i, j);//将截取后的字符串赋值给s3
if (s.indexOf(s3) != -1) {
//如果s3为s的子字符串,则将s3置入sonArray数组中
sonArray[arrIndex] = s3;
arrIndex++;
}
}
}
if (sonArray[0] == null) {//如果sonArray数组为空
System.out.println("两个字符串之间没有相同的子字符串!");
return;
}
String compareTemp = null;
//遍历sonArray数组,将最大长度的字符串赋值给sonArray数组的第一个值
for (int compareIndex = 1; compareIndex < arrIndex; compareIndex++) {
// System.out.println(sonArray[i]);
if (sonArray[0].length() < sonArray[compareIndex].length()) {
compareTemp = sonArray[0];
sonArray[0] = sonArray[compareIndex];
sonArray[compareIndex] = compareTemp;
compareIndex++;
}
}
}
//打印输出最大字符串
System.out.println("两个字符串的相同的最大子字符串为:"+sonArray[0]);
}
}