黑马程序员技术交流社区

标题: 两个字符串中最大相同的子串 [打印本页]

作者: 绝版坏银    时间: 2015-6-13 15:17
标题: 两个字符串中最大相同的子串
本帖最后由 绝版坏银 于 2015-6-13 15:20 编辑

在阳哥笔记里有这么一道题,
  1. package com.itheima;

  2. /*
  3. * 两个字符串中最大相同的子串
  4. *        "qwerabcdtyuiop"
  5. *        "xcabcdvbn"
  6. */
  7. public class Test3 {
  8.         public static void main(String[] args) {
  9.                 String s1 = "qwerabcdtyuiop";
  10.                 String s2 = "xcabcdvbn";

  11.                 System.out.println(getMax(s1, s2));
  12.         }

  13.         private static String getMax(String s1, String s2) {
  14.                 String max = null, min = null;
  15.                 // 比较两个字符串长度,长的为max,短的为min
  16.                 max = (s1.length() > s2.length()) ? s1 : s2;
  17.                 min = max.equals(s1) ? s2 : s1;

  18.                 for (int i = 0; i < min.length(); i++) {
  19.                         for (int a = 0, b = min.length() - i; b != min.length() + 1; a++, b++) {
  20.                                 String sub = min.substring(a,b);
  21.                                 if(max.contains(sub)){
  22.                                         return sub;
  23.                                 }
  24.                         }
  25.                 }

  26.                 return null;

  27.         }
  28. }
复制代码

作者: 绝版坏银    时间: 2015-6-13 15:22
上面第二个for循环为什么是b != min.length() + 1;而不是不b<min.length();
还有最后的return null;是不是只是满足有哥返回值
作者: 黑马晓飞    时间: 2015-6-13 15:35
什么叫最大相同的子串啊。 aassffgg    和  aasdffgg  最大相同的子串是ffgg  对吗???
作者: micro_hx    时间: 2015-6-13 15:37
绝版坏银 发表于 2015-6-13 15:22
上面第二个for循环为什么是b != min.length() + 1;而不是不b

我首先支持你一下,其实b! = min.length() +1 跟你的 b< min.length()是同样一个道理,,这里深究没有太大的意思。。。至于是否返回null,你想想啊,这种情况是存在的啊,abcdef ,,,,,gijknh...二者都不存在相同的字符串啊。。。。
作者: guiqulaixi    时间: 2015-6-13 15:48
当 i=0 的时候,b= min.length()  它要先去判断一下才会执行下面的循环体,较小的那个串本身也有可能是较大串的子串
作者: 绝版坏银    时间: 2015-6-13 16:00
黑马晓飞 发表于 2015-6-13 15:35
什么叫最大相同的子串啊。 aassffgg    和  aasdffgg  最大相同的子串是ffgg  对吗??? ...

应该把。0 0
作者: 绝版坏银    时间: 2015-6-13 16:01
micro_hx 发表于 2015-6-13 15:37
我首先支持你一下,其实b! = min.length() +1 跟你的 b< min.length()是同样一个道理,,这里深究没有太 ...

:handshake3q
作者: 绝版坏银    时间: 2015-6-13 16:06
guiqulaixi 发表于 2015-6-13 15:48
当 i=0 的时候,b= min.length()  它要先去判断一下才会执行下面的循环体,较小的那个串本身也有可能是较大 ...

对了,b=min.length();它的长度不是还要减去1,怎么能取到min.length()的
作者: guiqulaixi    时间: 2015-6-13 16:13
绝版坏银 发表于 2015-6-13 16:06
对了,b=min.length();它的长度不是还要减去1,怎么能取到min.length()的

字符串本身也是自己的子串




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2