黑马程序员技术交流社区

标题: day15 String:小题解析及图解—两个字符串中最大相同的子串 [打印本页]

作者: suiabing    时间: 2012-4-23 14:07
标题: day15 String:小题解析及图解—两个字符串中最大相同的子串



仅供个人参考,欢迎讨论,也可到我的博客www.itcast.info讨论。为了目标奋斗着......
  1. package suisuisui.day15;

  2. /*
  3. * 两个字符串中最大相同的子串。
  4. * "qwerabcdtyuiop"
  5. * "xcabcdvbn"
  6. * 思路:首先我们用较短的字符串当做key值在较大的字符串中查找。
  7. *                 如果找到,则返回此串,
  8. *                 如果未找到,将key的长度减1,可以得到2个key,分别查找,找到即返回此串,未找到再次将key长度减一
  9. *                 依次遍历查找。直到找到为止。
  10. * 注意:如果两个字符串其中一个为空,那么直接返回空。如果不做这个判断的话下面contains()会抛出异常要try一下
  11. *
  12. * contains
  13. public boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。

  14. 参数:
  15. s - 要搜索的序列
  16. 返回:
  17. 如果此字符串包含 s,则返回 true,否则返回 false
  18. 抛出:
  19. NullPointerException - 如果 s 为 null
  20. 从以下版本开始:
  21. 1.5
  22. *                
  23. */
  24. class Test2{
  25.        
  26.         public static void main(String[] args){
  27.                 String str1 = "qwerabcdtyuiop";
  28.                 String str2 = "xcabcdvbn";
  29.                 System.out.println("最大相同字符串是: " + getMaxSame(str1,str2));
  30.         }
  31.        
  32.         /**
  33.          * 获取最大子串
  34.          *
  35.          * @param str1
  36.          * @param str2
  37.          * @return
  38.          */
  39.         public static String getMaxSame(String str1, String str2) {       
  40.                 if (str1==null || str2== null) //如果有一个字符串为空 返回空,结束函数
  41.                         return null;
  42.                 String max = str1.length()>str2.length()? str1 : str2;
  43.                 String min = str1.length()<str2.length()? str1 : str2;               
  44.                 for (int i = 0; i < min.length(); i++) {
  45.                         for (int startIndex = 0, endIndex = min.length()-i; endIndex <= min.length(); startIndex++, endIndex++) {
  46.                                 String sub = min.substring(startIndex, endIndex);//定义新的子串作为key,判断是否包含在内。
  47.                                 if(max.contains(sub))//如果包含子串
  48.                                         return sub;//返回找到的子串。这个就是最大的子串,不明白的看图吧。
  49.                         }
  50.                 }               
  51.                 return null;//如果没有找到相同字符串,返回空。
  52.         }
  53. }
复制代码





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