求助 String 练习题

ag3344 2015-11-14 09:28:24
问下,为什么这个没有 w?


package string;


import java.util.ArrayList;
import java.util.List;


public class question {
public static void main(String[] args){
List<String> str7 = getMaxSubString("abcwerthelloyuiodefz", "abllw");
System.out.println(str7);
}



public static List<String> getMaxSubString(String str1, String str2){
String maxStr = (str1.length() > str2. length())? str1 : str2;
String minStr = (str1.length() < str2. length())? str1 : str2;
int len = minStr.length();
List<String> list = new ArrayList<String>();
for(int i = 0; i<len; i++){
for(int x = 0, y = len-i; y<=len; x++,y++){
String str = minStr.substring(x, y);
System.out.println(str);
if(maxStr.contains(str)){
list.add(str);
}
}
if(list.size() != 0){
return list;
}
}
return null;
}
}
...全文
132 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ag3344 2015-11-16
  • 打赏
  • 举报
回复
对哦,忘记是最大子串了 放在外面是公共子串 多谢
kevinzhan0417 2015-11-15
  • 打赏
  • 举报
回复
首先得说清楚getMaxSubString这个函数是干嘛的,如果按其字面意思,获得最大子串,那么楼主代码没问题,因为w这个子串明显要比ab或ll要短,所以返回时不会有w。 其实从代码上看,这里实现方法就是从较短的那个字符串里从长到短获取其字串,然后看较长的那个字符串里是否也具有这个子串,若有则添加到返回的List中,由于是要获得最大字串,所以从长到短比较(且同一长度字串一次全部比较完再判断List是否为空),只要List中不为空了,那么就说明List中已经是最长子串了,故直接返回这个List。 如果要有w,那么楼主可能认为这个函数的意思是获取两个字符串的公共子串,只要把那个判断List是否为空然后返回的那一个if语句段提到外面一层大括号就可以了。 同楼上建议楼主debug单步看一下,很清楚。
hanmuxue 2015-11-14
  • 打赏
  • 举报
回复
问题关键在于循环时候结束 if(list.size() != 0){ return list; } 当 i = 3时,System.out.println(str);输出的结果为:ab ,bl ,ll ,lw; 此时执行 if(maxStr.contains(str)){ list.add(str); } 发现 ab,ll 满足条件会被添加到list中,接下来执行(因为这段代码在for循环内) if(list.size() != 0){ return list; } 发现size为2,不满足条件,getMaxSubString直接就return掉了, 所以没有 a,b,l,l,w 了 建议自己dubug看一下整个循环的执行过程
飏飏一蝶 2015-11-14
  • 打赏
  • 举报
回复
为什么要有w....

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧