查找两个字符串中的公共字符串
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;}}
相关文章推荐
- 【华为oj】oj2034查找两个字符串a,b中的最长公共子串
- 查找两个字符串的最长公共子串(附源码)_AX
- 华为OJ 公共字串计算&&查找两个字符串a,b中的最长公共子串
- 华为OJ——查找两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 华为(8)查找两个字符串a,b中的最长公共子串
- Java语言实现查找两个字符串的最大公共字串
- 查找两个字符串a,b中的最长公共子串
- 华为OJ——查找两个字符串a,b中的最长公共子串
- 华为OJ——查找两个字符串a,b中的最长公共子串
- 华为练习--查找两个字符串a,b中的最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 华为OJ中级题-查找两个字符串a,b中的最长公共子串
- OJ------查找两个字符串a,b中的最长公共子串
- C语言中怎样查找两个字符串的最长公共字符串
- 查找两个字符串a,b中的最长公共子串
- 【华为OJ】【081-查找两个字符串a,b中的最长公共子串】
- 华为机试---查找两个字符串a,b中的最长公共子串
- JavaScript自定义函数实现查找两个字符串最长公共子串的方法
- 华为机试在线训练-牛客网(30)查找两个字符串a,b中的最长公共子串