对于相同的代码我得到2个不同的结果(几乎以相同的方式编写)。 消费税来自: codingbat
消费税是:
“给定一个字符串,返回一个删除所有”yak“的版本,但”a“可以是任何字符。”yak“字符串不会重叠”。
“codingbat”的正式解决方案是:
public String stringYak(String str) {
String result = "";
for (int i=0; i<str.length(); i++) {
// Look for i starting a "yak" -- advance i in that case
if (i+2<str.length() && str.charAt(i)=='y' && str.charAt(i+2)=='k') {
i = i + 2;
} else { // Otherwise do the normal append
result = result + str.charAt(i);
}
}
return result;
}
我的解决方案是:
public String stringYak(String str){
int len = str.length();
String resultNoYak = "";
for (int i=0;i<len;i++){
if ((i+2<len)&&(str.charAt(i)=='y')&&(str.charAt(i+3)=='k')) {
i=i+2;
}
else {
resultNoYak = resultNoYak + (str.charAt(i));
}
}
return resultNoYak;
}
}
输入:yakpak
第一个代码返回:
帕克(正确)
我的代码返回:
yakpak(不正确)
这可能是什么原因?
答案 0 :(得分:0)
这一行
if ((i+2<len)&&(str.charAt(i)=='y')&&(str.charAt(i+3)=='k'))
应该是
if ((i+2<len)&&(str.charAt(i)=='y')&&(str.charAt(i+2)=='k'))
答案 1 :(得分:0)
第一个代码
str.charAt(i+2)=='k'
您的代码
str.charAt(i+3)=='k'
答案 2 :(得分:0)
在代码中第三个条件导致问题。 这一行:
if ((i+2 < len) && (str.charAt(i) == 'y') && (str.charAt(i+3) == 'k'))
应该是:
if ((i+2 < len) && (str.charAt(i) == 'y')&&(str.charAt(i+2) == 'k'))
应该可以正常工作:)