查找两个字符串中的公共字符串


/**
 * 功能:查找两个字符串中的公共字符串。
 * 
 * 思路: 1、判断两个字符串的长度,如果s1.length()<s2.length(),则交换值。
 *		  因为我们是在短的字符串中选取子字符串去匹配长的字符串,这样减少比较次数
 *		2、使用substring()方法获取指定位置的子字符串。然后用indexOf()方法判断 的这个字符串是不是在s1中。
 *		3、使用substring()方法获取子字符串时,先从最长的子字符串查找。
 *		4、当存在相同长度的子字符串时,计数器加1,并且打印这些相同长度的字符串。
 *			这里在内存循环结束时判断一次,如果计数器的值改变,则不在查找其他子字符串, 因为后面的产生的子字符串的长度都比这层小。并且返回当前计数器的值。
 * 方法1:返回相同的最大字符串
 * 
 * 方法2:返回所有相同的的字符串
 */

package test;
public class Demo2 {

	public static void main(String[] args) {
		String a = "abcdefghijklmnopqrstuvwxyz";
		String b = "1234567890abcdfrgtddd12321414";
		// 演示字符串有相同的情况
		// String c = "123456789abc";
		// String d = "a123abc";
		// method_1(c,d);
		System.out.println(a);
		System.out.println(b);
		System.out.println("相同的最大公共字符串的个数为:" + method_2(a, b));

	}

	/**
	 * method_1()方法 功能:判断两个字符串中是不是存在公共的字符串 如果有:打印当前相同的最大公共字符串,并且返回相同最大字符串的个数
	 * 如果没有:0
	 * 
	 * 思路: 1、判断两个字符串的长度,如果s1.length()<s2.length(),则交换值。
	 * 因为我们是在短的字符串中选取子字符串去匹配长的字符串,这样减少比较次数
	 * 2、使用substring()方法获取指定位置的子字符串。然后用indexOf()方法判断 的这个字符串是不是在s1中。
	 * 3、使用substring()方法获取子字符串时,先从最长的子字符串查找。
	 * 4、当存在相同长度的子字符串时,计数器加1,并且打印这些相同长度的字符串。
	 * 这里在内存循环结束时判断一次,如果计数器的值改变,则不在查找其他子字符串, 因为后面的产生的子字符串的长度都比这层小。并且返回当前计数器的值。
	 * 
	 * 
	 * 注意: 1、此处默认公共字符串必须是有两个或者两个以上的字符串。 2、当存在多个相同位数的最大字符串时,全部打印出来
	 * 
	 * @param s1
	 * @param s2
	 * @return
	 */
	public static int method_1(String s1, String s2) {
		// 判断字符串的长度,若果字符串s1比s2短,就交换,必须保证s2是短的字符串
				if (s1.length() < s2.length()) {
					String temp = s1;
					s1 = s2;
					s2 = temp;
				}
		// 用于计算相同的最大公共字符串有多少个
		int t = 0;
		String str;
		// 外层循环控制substring()方法的结尾,并且还控制偏移量的大小
		for (int i = s2.length(); i > 1; i--) {
			// 内存循环控制偏移量的递增
			for (int j = 0; j <= s2.length() - i; j++) {
				// 返回指定的部分字符串
				str = s2.substring(j, i + j);
				// 调用indexOf()方法,判断指定的字符串在s1字符串中是不是出现。
				if (s1.indexOf(str) != -1) {
					// 打印相同的字符串
					System.out.println("最大的公共字符串为:" + str);
					// 当存在相同的字符串时,计数器加一
					t++;
				}
			}
			// 接收内层循环时开始判断有没有出现过相同的字符串。如果有,返回相同字符串的个数
			if (t != 0)
				return t;
		}
		// 如果没有字相同字符串,执行这条语句
		return t;
	}

	/**
	 * method_2()方法
	 * 
	 * 功能:判断两个字符串中是不是存在公共的字符串 如果有:打印当前相同的公共字符串,并且返回相同字符串的个数 ,如果没有:返回0
	 * 
	 * 思路: 1、判断两个字符串的长度,如果s1.length()<s2.length(),则交换值。
	 * 因为我们是在短的字符串中选取子字符串去匹配长的字符串,这样减少比较次数
	 * 2、使用substring()方法获取指定位置的子字符串。然后用indexOf()方法判断 的这个字符串是不是在s1中。
	 * 3、使用substring()方法获取子字符串时,先从最长的子字符串查找。
	 * 4、当存在相同长度的子字符串时,计数器加1,并且打印这些相同长度的字符串。
	 * 这里在内存循环结束时判断一次,并且返回当前计数器的值。
	 * 
	 * 
	 * 注意: 1、此处默认公共字符串必须是有两个或者两个以上的字符串。 2、当存在多个相同位数的字符串时,全部打印出来
	 * 
	 * @param s1
	 * @param s2
	 * @return
	 */
	public static int method_2(String s1, String s2) {
		// 判断字符串的长度,若果字符串s1比s2短,就交换,必须保证s2是短的字符串
		if (s1.length() < s2.length()) {
			String temp = s1;
			s1 = s2;
			s2 = temp;
		}
		// 用于计算相同的最大公共字符串有多少个
		int t = 0;
		String str;
		// 外层循环控制substring()方法的结尾,并且还控制偏移量的大小
		for (int i = s2.length(); i > 1; i--) {
			// 内存循环控制偏移量的递增
			for (int j = 0; j <= s2.length() - i; j++) {
				// 返回指定的部分字符串
				str = s2.substring(j, i + j);
				// 调用indexOf()方法,判断指定的字符串在s1字符串中是不是出现。
				if (s1.indexOf(str) != -1) {
					// 打印相同的字符串
					System.out.println("最大的公共字符串为:" + str);
					// 当存在相同的字符串时,计数器加一
					t++;
				}
			}
		}
		return t;
	}

}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值