首页  »   J2SE

String 练习题

网友分享于:2015-11-16  浏览:0次
求助 String 练习题
问下,为什么这个没有 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;
}
}
------解决思路----------------------
为什么要有w....
------解决思路----------------------
问题关键在于循环时候结束
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看一下整个循环的执行过程
------解决思路----------------------
首先得说清楚getMaxSubString这个函数是干嘛的,如果按其字面意思,获得最大子串,那么楼主代码没问题,因为w这个子串明显要比ab或ll要短,所以返回时不会有w。
其实从代码上看,这里实现方法就是从较短的那个字符串里从长到短获取其字串,然后看较长的那个字符串里是否也具有这个子串,若有则添加到返回的List中,由于是要获得最大字串,所以从长到短比较(且同一长度字串一次全部比较完再判断List是否为空),只要List中不为空了,那么就说明List中已经是最长子串了,故直接返回这个List。
如果要有w,那么楼主可能认为这个函数的意思是获取两个字符串的公共子串,只要把那个判断List是否为空然后返回的那一个if语句段提到外面一层大括号就可以了。
同楼上建议楼主debug单步看一下,很清楚。

相关解决方案

最新解决方案