Java 递归计数字母
我正在尝试创建一个程序,该程序将计算出现在两个相同子字符串之间的字符串中的字符数,Java 递归计数字母,java,Java,我正在尝试创建一个程序,该程序将计算出现在两个相同子字符串之间的字符串中的字符数, 例如: strDist(“cccatcowcatxx”、“cat”)→应该返回9,因为两个cat实例(包括实例本身)之间的字母数是9 public int strDist(String str, String sub) { if (str.length() >= sub.length()){//accomodate for the last length of string hat can be e
例如:
strDist(“cccatcowcatxx”、“cat”)→
应该返回9
,因为两个cat实例(包括实例本身)之间的字母数是9
public int strDist(String str, String sub) {
if (str.length() >= sub.length()){//accomodate for the last length of string hat can be equal to sub
if ((str.substring(0,sub.length())).equals(sub)){
return sub.length() + strDist(str.substring(sub.length(), str.length()), sub);
}
else if ((str.substring(str.length() - 1, str.length()).equals(sub.substring(sub.length() - 1,sub.length())))){
return sub.length();//return diff here
}
else {
return (strDist(str.substring(1,str.length()), sub));
}
}
return 0;
}
正确的方法是:
public int strDist(String str, String sub) {
if (str.length() >= sub.length()){
if ((str.substring(0,sub.length())).equals(sub)){
if ((str.substring(str.length() - sub.length())).equals(sub)){
return str.length();
}
else{
return strDist(str.substring(0, str.length()-1), sub);
}
}
else {
return (strDist(str.substring(1), sub));
}
}
return 0;
}
我假设-如果我错了请纠正我-如果
sub
没有发生,结果应该是0;如果发生一次,结果应为sub
;如果多次出现,结果可能是以sub
开始和结束的最长子字符串的长度
因此,您的外部if
语句是正确的:只有当字符串足够长时,才能搜索子
。接下来检查字符串是否以sub
开头,这也是一个好主意。但是不要从一开始就删掉sub
。因为如果从catcowcat
中切掉cat
,递归调用strist(“cowcat”、“cat”)
将不会返回6(至少不应该返回)。相反,我建议您查看字符串是否也以sub
结尾。如果是,只返回整个字符串的长度。如果没有,则从末尾切掉一个字符并递归调用
一些提示:您可以使用str.startsWith(sub)
来代替str.substring(0,sub.length()).equals(sub)
。您可以只编写str.substring(1)
,而不是str.substring(1)
,如果您愿意,也可以这样做
编辑:很高兴你成功了,老兄。我正在从注释中格式化您的固定/工作代码,并将其粘贴到此处,以防其他人阅读:
public int strDist(String str, String sub) {
if (str.length() >= sub.length()) {
if ((str.substring(0, sub.length())).equals(sub)) {
if ((str.substring(str.length() - sub.length())).equals(sub)) {
return str.length();
} else {
return strDist(str.substring(0, str.length() - 1), sub);
}
} else {
return (strDist(str.substring(1), sub));
}
}
return 0;
}
您可能想问一个问题。
return str.split(sub)[1]有什么问题。length()+sub.length()*2代码>?我必须同意这里的@shmosel-你能编辑以包含一个实际问题吗?非常感谢Ole V.V.在遵循你的建议后,我让它工作了。public int strist(String str,String sub){if(str.length()>=sub.length()){if((str.substring(0,sub.length()).equals(sub)){if((str.substring(str.length()-sub.length())).equals(sub)){return str.length();}else{return str.substring(0,str.length()-1,sub);}}else{return str.substring(1,sub));}return 0;}