黑马程序员技术交流社区
标题:
获取最大子串的问题
[打印本页]
作者:
张雪磊
时间:
2012-7-18 21:16
标题:
获取最大子串的问题
public static String getMaxSubString(String s1,String s2)
{
String max = "",min = "";
max = (s1.length()>s2.length())?s1: s2;
min = (max==s1)?s2: s1;
// sop("max="+max+"...min="+min);
for(int x=0; x<min.length(); x++)
{
for(int y=0,z=min.length()-x; [color=Red]z!=min.length()+1[/color]; y++,z++)
{
String temp = min.substring(y,z);
sop(temp);
if(max.contains(temp))//if(s1.indexOf(temp)!=-1)
return temp;
}
}
return "";
}
复制代码
请问在这个获取最大子串中的红色部分为什么是z!=min.length()+1,而不是z!=min.length()?length()本身不就是最大角标加1吗?.substring(y,z)包含头不包含尾所以取到长度不就是最大角标了吗?
作者:
于星星
时间:
2012-7-18 22:23
本帖最后由 于星星 于 2012-7-18 22:24 编辑
这里楼主可能弄错了一点东西, String substring(int beginIndex, int endIndex) 是包含头不包含尾的
用集合表示就是半开半闭区间(a,b]。所以要将z=min.length的情况包含进去,就要是z!=min.length()+1,也可以改成如下 :
public class Snippet {
public static String getMaxSubString(String s1, String s2) {
String max = "", min = "";
max = (s1.length() > s2.length()) ? s1 : s2;
min = (max == s1) ? s2 : s1;
for (int x = 0; x < min.length(); x++) {
//因为z=min.length时是有效的截取,所以要包含在内
for (int y = 0, z = min.length() - x; z<min.length()+ 1; y++, z++) {
//这种方法产生很多子串,比较消耗内存
String temp = min.substring(y, z);
System.out.println((temp));
if (max.contains(temp))
return temp;
}
}
return "";
}
public static void main(String[] args) {
String str1 = "adsfjavafdsfe";
String str2 = "dgjavaef";
System.out.println(str2.substring(0,3)); //结果工dgj不包含下标为3的元素a
System.out.println(str2.length());
System.out.println(getMaxSubString(str1, str2));
}
}
作者:
袁錦泰
时间:
2012-7-19 00:42
这和包含头不包含尾没什么关系,那是要限定区间范围,防止判断时尾指针角标越界的条件.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2