我正在尝试创建一个程序来计算字符串中出现在两个相同子字符串之间的字符数,
例如:
strDist("cccatcowcatxx", "cat") →
应return 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;
}
答案 0 :(得分:0)
我假设 - 如果我错了,请纠正我 - 如果sub
没有发生,结果应为0;如果它出现一次,结果应该是sub
的长度;如果它多次出现,结果可能是以sub
开头和结尾的最长子字符串的长度。
所以你的外if
语句是合理的:只有当字符串足够长时,才搜索sub
。接下来,检查字符串是否以sub
开头,这也是一个好主意。但是不要从一开始就切断sub
。因为如果您从cat
中删除catcowcat
,则递归调用strDist("cowcat", "cat")
将不会返回6(至少它不应该返回)。相反,我建议,看看字符串是否也以sub
结尾。如果是,只返回整个字符串的长度。如果没有,请从 end 中删除一个字符并递归调用。
一些提示:您可以str.substring(0,sub.length()).equals(sub)
代替str.startsWith(sub)
而不是str.substring(1,str.length())
。如果您愿意,可以只编写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;
}
而不是jQuery(document).ready(function(){
//some logic
newFunc();
//logic
});
function newFunc(){
//logic
}
,这样做也是如此。
编辑:很高兴你得到了它的工作,classic_man。我正在从评论中格式化您的固定/工作代码并将其粘贴在此处以防其他人想要阅读:
<script>