仅供个人参考,欢迎讨论,也可到我的博客www.itcast.info讨论。为了目标奋斗着......- package suisuisui.day15;
- /*
- * 两个字符串中最大相同的子串。
- * "qwerabcdtyuiop"
- * "xcabcdvbn"
- * 思路:首先我们用较短的字符串当做key值在较大的字符串中查找。
- * 如果找到,则返回此串,
- * 如果未找到,将key的长度减1,可以得到2个key,分别查找,找到即返回此串,未找到再次将key长度减一
- * 依次遍历查找。直到找到为止。
- * 注意:如果两个字符串其中一个为空,那么直接返回空。如果不做这个判断的话下面contains()会抛出异常要try一下
- *
- * contains
- public boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。
- 参数:
- s - 要搜索的序列
- 返回:
- 如果此字符串包含 s,则返回 true,否则返回 false
- 抛出:
- NullPointerException - 如果 s 为 null
- 从以下版本开始:
- 1.5
- *
- */
- class Test2{
-
- public static void main(String[] args){
- String str1 = "qwerabcdtyuiop";
- String str2 = "xcabcdvbn";
- System.out.println("最大相同字符串是: " + getMaxSame(str1,str2));
- }
-
- /**
- * 获取最大子串
- *
- * @param str1
- * @param str2
- * @return
- */
- public static String getMaxSame(String str1, String str2) {
- if (str1==null || str2== null) //如果有一个字符串为空 返回空,结束函数
- return null;
- String max = str1.length()>str2.length()? str1 : str2;
- String min = str1.length()<str2.length()? str1 : str2;
- for (int i = 0; i < min.length(); i++) {
- for (int startIndex = 0, endIndex = min.length()-i; endIndex <= min.length(); startIndex++, endIndex++) {
- String sub = min.substring(startIndex, endIndex);//定义新的子串作为key,判断是否包含在内。
- if(max.contains(sub))//如果包含子串
- return sub;//返回找到的子串。这个就是最大的子串,不明白的看图吧。
- }
- }
- return null;//如果没有找到相同字符串,返回空。
- }
- }
复制代码 |
|