我目前正在解决以下hackerrank问题https://www.hackerrank.com/challenges/reduced-string/problem,在给定字符串的地方我必须消除相同的字符对。
我的代码如下:
static String super_reduced_string(String s){
for (int i = 0; i < s.length()-1; i++) {
if (s.charAt(i) == s.charAt(i+1)) {
s = s.substring(0, i) + s.substring(i+2);
i = 0;
}
}
if (s.length() == 0) {
return("Empty String");
} else {
return(s);
}
}
它适用于大多数情况,但是对于某些测试用例,如果字符串是“baab”,代码输出“bb”(baab应该简化为bb然后再变为空字符串)而不是空字符串,但是我不知道不知道为什么会这样。
在for
循环结束时,i
递增。因此,如果您希望循环在匹配后再次从头开始,则需要将i
设置为-1
,以便下一个循环运行以i==0
开头。
static String super_reduced_string(String s){
for (int i = 0; i < s.length()-1; i++) {
if (s.charAt(i) == s.charAt(i+1)) {
s = s.substring(0, i) + s.substring(i+2);
i = -1; // so after the ++ at the end of the loop, the next loop-run will have i==0.
}
}
if (s.length() == 0) {
return("Empty String");
} else {
return(s);
}
}
篡改循环计数器总是有点容易出错。所以我建议避免它。