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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
  String s1 = "qwerabcdtyuiop";
  String s2 = "xcabcdvbn";
  String s = getMaxSubstring(s2, s1);
  System.out.println("s=" + s);
}      
public static String getMaxSubstring(String s1, String s2) {
               
                String max = null,min = null;
                max = (s1.length()>s2.length())?s1:s2;
               
                min = max.equals(s1)?s2:s1;
               
                System.out.println("max="+max);
                System.out.println("min="+min);
               
               
               
                for (int i = 0; i < min.length(); i++) {
                        
                        for(int a = 0,b = min.length()-i; b != min.length()+1; a++,b++){
                                
                                String sub = min.substring(a, b);
                                if(max.contains(sub))
                                        return sub;
                        }
                }
               
                return null;
        }
}

for循环语句中 b != min.length()+1 这个地方为什么要加1 ??

6 个回复

倒序浏览
     for (int i = 0; i < min.length(); i++) {
                        
                        for(int a = 0,b = min.length()-i; b != min.length()+1; a++,b++){
                                                                    //这里的b为子串的长度,子串的长度不能大于角标,但这里是用substring(a,b),
                                              //是到b点,但不包括b,所以要截取到最后一个字符就必须比字符串长度大1;这样说明白吗?
                                              //这里可以把b!=min.length()+1改成b<=min.length();

                                
                                String sub = min.substring(a, b);
                                if(max.contains(sub))
                                        return sub;
                        }
               

点评

不能改成b<=min.length(); 这样会导致相同子串少一个字母,我试过了 请给解释下  发表于 2012-4-28 16:46
回复 使用道具 举报
这是由于subString(startIndex,endIndex);
它得到的子串是startIndex下标开始,到endIndex-1结束。
所以如果length不加1的话,永远取不到最后一的字符
回复 使用道具 举报
substring(a, b),意思是从a取到b,但b不能a相等,要大于a才能取
回复 使用道具 举报
public String substring(int beginIndex,int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 所以要+1否则最后的字符取不到
回复 使用道具 举报

/


该说的楼上的基本都说了,我直接发我画的一个图吧,这个图我在原来帖子里也发过!可以找一下原思路。

substring(a,b) 包含头不包含尾
我补充一下其他的吧

如果两个字符串其中一个为空,那么直接返回空。如果不做这个判断的话下面contains()会抛出异常要try一下
contains
public boolean contains(CharSequence s)当且仅当此字符串包含指定的 char 值序列时,返回 true。

参数:
s – 要搜索的序列
返回:
如果此字符串包含 s,则返回 true,否则返回 false
抛出:
NullPointerException – 如果 s 为 null
从以下版本开始:
1.5


public static String getMaxSubstring(String s1, String s2)//在你的函数体前面加上

{
         if (str1==null || str2== null) //如果有一个字符串为空 返回空,结束函数
          return null;
}


哦了

评分

参与人数 1技术分 +2 收起 理由
职业规划-刘倩老师 + 2 赞一个!

查看全部评分

回复 使用道具 举报
我也学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马