您的位置:首页 > 编程语言 > Java开发

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

2015-01-13 19:42 375 查看
/*** 功能:查找两个字符串中的公共字符串。** 思路: 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;}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息