本帖最后由 张小锋 于 2012-5-9 00:15 编辑
public class 得到相同子字符串{
public static void main(String args[]){
System.out.println(getSameStr("xiaofeng", "suibianxiaoasdasdxiaofengxiaofeng"));
}
public static String getSameStr(String str1,String str2){
String shortStr=str1.length()>str2.length()?str2:str1;//获取较短的那个字符串
String longerStr=str1.length()>str2.length()?str1:str2;
String sign=null;
ArrayList vect=new ArrayList(){//从写了Add方法,目的是不向集合中添加重复元素。
@Override
public boolean add(Object e) {
if(this.contains(e)){
return false;
}
else{
super.add(e);
return true ;
}
}
};
addSplitStr(shortStr,0,shortStr.length(),vect);
Collections.sort(vect,new Comparator(){
@Override
public int compare(Object o1, Object o2) {
return o2.toString().length()-o1.toString().length();//按字符串长度倒叙排序
}
});
for (Object object : vect) {
if(longerStr.contains(object.toString())){//比较元素是否包含在长的那个字符串之中
sign=object.toString();
break;
}
}
return sign;
}
//----------------------------------------------------------下面的递归,两次调用了方法体--------------------------------//
public static void addSplitStr(String str,int startIndex,int endIndex,ArrayList vect){ 标记:A
if(startIndex!=endIndex){
vect.add(str.substring(startIndex,endIndex));
addSplitStr( str, startIndex+1, endIndex, vect); 标记:B
addSplitStr( str, startIndex, endIndex-1, vect); 标记:C
}
}
}
每次用到类似这种递归法时,尤其在二叉树遍历集合元素,虽然能达到想要的目的,但对这中递归法一直不得其解,一般递归法是在方法体中通过调用方法本身来实现循环,但遇到上面这种情况是两次调用了方法体,我总觉得程序执行到B那个地方时会回到A那个地方,C那块应该永远没有执行的机会,但事实并不如此,C那块也能执行,请能帮我解释一下这是为什么呢?
|