A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王言龙 中级黑马   /  2012-7-13 22:15  /  1136 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-王言龙 于 2012-7-13 22:36 编辑
  1. /*需求:求两个字符串中最大的相同子串
  2. *
  3. */
  4. public class StringMaxSub {

  5.         public static void main(String[] args) {
  6.             String s1 = "akjknpojavawklsf";
  7.             String s2 = "poqljavaglkj";
  8.             System.out.println(getMaxSub(s2, s1));
  9.         }
  10.         public static String getMaxSub(String s1, String s2) {
  11.             //判断传入的字符串的长短
  12.             String max = "";
  13.             String min = "";
  14.             max = (s1.length() > s2.length()) ? s1 : s2;
  15.             min = (max == s1) ? s2 : s1;

  16.             //对短字符串进行循环取子串,并将子串和长字符串对比
  17.             for(int x=0; x<min.length(); x++) {
  18.                 for(int y=0, z=min.length()-x; z!=min.length()+1; y++, z++) {
  19. //是不是应改为for(int y=0, z=min.length()-x-1; z!=min.length(); y++, z++)?因为y从0开始,那z最初的取值若为min.length()-x,
  20. //此时x=0,z=min.length(),那y-z不是超过min的长度了吗?
  21.                     String temp = min.substring(y, z);
  22.                     if(max.contains(temp)) {
  23.                         return temp;
  24.                     }
  25.             return "";
  26.         }
  27. }
  28. 这是毕老师的java基础视频里的代码。
复制代码

3 个回复

倒序浏览
本帖最后由 陆强强 于 2012-7-13 22:31 编辑

for(int x=0; x<min.length(); x++) {

for(int y=0, z=min.length()-x; z<=min.length(); y++, z++)
String temp = min.substring(y, z);//这里不包涵Z的角标

if(max.contains(temp)) {

return temp;

}

}

}

return "";

}

}
回复 使用道具 举报
陆强强 发表于 2012-7-13 22:25
for(int x=0; x

原来如此,谢谢
回复 使用道具 举报
x表示对子串减少的个数,x=0表示完整子串。y表示子串的首字符位置,z表示子串的末位置。
当x=0时,由于此时子串长度为min.Length,所以此时y=0时,z=min.Length ,z-y=min.Length并没有超过长度啊!!
当x=1时,表示减少一个长度的子串。y=0时,z=min.Length-1... y=1时,z=minLength-1+1,...
当x=2时...
子串越来越短,直到找到在长串中存在的子串。

原始代码没有错误:

public class StringMaxSub {
    public static void main(String[] args) {
        String s1 = "akjknpojavawklsf";
        String s2 = "poqljavaglkj";
        System.out.println(getMaxSub(s2, s1));
    }
   
    public static  String getMaxSub(String s1, String s2){
        String max = "";
        String min = "";
        max = (s1.length() > s2.length()) ? s1 : s2;
        min = (max == s1) ? s2 : s1;

        for(int x=0; x<min.length(); x++) {
            for(int y=0, z=min.length()-x; z!=min.length()+1; y++, z++) {
                String temp = min.substring(y, z);
                if(max.contains(temp)) {
                    return temp;
                }
            }
           
        }
        return "";
    }
}
输出结果:java
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马