黑马程序员技术交流社区
标题:
字符串比较问题
[打印本页]
作者:
黑马-王言龙
时间:
2012-7-13 22:15
标题:
字符串比较问题
本帖最后由 黑马-王言龙 于 2012-7-13 22:36 编辑
/*需求:求两个字符串中最大的相同子串
*
*/
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++) {
//是不是应改为for(int y=0, z=min.length()-x-1; z!=min.length(); y++, z++)?因为y从0开始,那z最初的取值若为min.length()-x,
//此时x=0,z=min.length(),那y-z不是超过min的长度了吗?
String temp = min.substring(y, z);
if(max.contains(temp)) {
return temp;
}
return "";
}
}
这是毕老师的java基础视频里的代码。
复制代码
作者:
陆强强
时间:
2012-7-13 22:25
本帖最后由 陆强强 于 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:35
陆强强 发表于 2012-7-13 22:25
for(int x=0; x
原来如此,谢谢
作者:
周刚
时间:
2012-7-13 22:47
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
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2