[Java]取得两个字符串的最大相同子串

思路:          

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];
     ........
  需要嵌套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]);
	}
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值