背景
我目前正在编写与递归相关的codingbat网站上的练习,但是我的程序似乎对某些输入显示错误的结果。
来自codingbat的问题场景
给定一个字符串和一个非空子字符串sub,递归计算 最大的子字符串,以sub开头和结尾并返回它 长度。
例如
strDist("catcowcat", "cat") → 9
strDist("catcowcat", "cow") → 3
strDist("cccatcowcatxx", "cat") → 9
我的问题
你能帮我找到会使我的程序显示错误结果的输入吗?
public int strDist(String str, String sub) {
if(str.length() == 0 || sub.length() == 0){
return 0;
}
if( str.length() >= sub.length() ) {
StringBuilder builder = new StringBuilder(str);
String getSubFront = builder.substring(0, sub.length());
String getSubEnd = builder.substring(str.length() - sub.length());
if (!getSubFront.equals(sub)) {
builder.deleteCharAt(0);
return strDist(builder.toString(), sub);
}
if (!getSubEnd.equals(sub)) {
builder.deleteCharAt(builder.length() - 1);
return strDist(builder.toString(), sub);
}
}
return str.length();
}
答案 0 :(得分:3)
如果str.length()
小于sub.length()
,该怎么办?
strDist("a", "aa")
应返回0,但程序返回1.
答案 1 :(得分:0)
我是这样做的...
public int strDist(String str, String sub){
if(str.length() < sub.length()){
return 0;
}
if(str.startsWith(sub)){
return str.lastIndexOf(sub) + sub.length();
}else{
strDist(str.substring(1),sub);
}
if(str.length()==0){
return 0;
}
return strDist(str.substring(1),sub);
}
答案 2 :(得分:0)
另一种解决方案...
public int strDist(String str, String sub) {
if(str.length() < sub.length() ) return 0;
if(str.substring(0,sub.length()).equals(sub)){
if(str.substring(str.length()-sub.length(), str.length()).equals(sub)) {
return str.length();
}else{
return strDist(str.substring(0,str.length()-1), sub);
}
}
return strDist(str.substring(1,str.length()), sub);
}