黑马程序员技术交流社区
标题: 请教一个问题 --两个字符串中最大相同的子串 [打印本页]
作者: 陈波 时间: 2012-4-26 17:25
标题: 请教一个问题 --两个字符串中最大相同的子串
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 ??
作者: 林德燚 时间: 2012-4-26 17:49
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;
}
作者: 高彰谦 时间: 2012-4-26 18:01
这是由于subString(startIndex,endIndex);
它得到的子串是startIndex下标开始,到endIndex-1结束。
所以如果length不加1的话,永远取不到最后一的字符
作者: 王敏NO.09 时间: 2012-4-26 18:09
substring(a, b),意思是从a取到b,但b不能a相等,要大于a才能取
作者: 贾联国 时间: 2012-4-26 18:12
public String substring(int beginIndex,int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 所以要+1否则最后的字符取不到
作者: suiabing 时间: 2012-4-26 18:55
/
该说的楼上的基本都说了,我直接发我画的一个图吧,这个图我在原来帖子里也发过!可以找一下原思路。
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;
}
哦了
作者: 陌路行者 时间: 2013-6-20 18:37
我也学习一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |