Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 消除字符串中的重复字符_Java_Algorithm - Fatal编程技术网

Java 消除字符串中的重复字符

Java 消除字符串中的重复字符,java,algorithm,Java,Algorithm,我目前正在解决以下hackerrank问题,在给定字符串的情况下,我必须消除相同的字符对 我的代码如下: 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);

我目前正在解决以下hackerrank问题,在给定字符串的情况下,我必须消除相同的字符对

我的代码如下:

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);
    }

}
static String super\u reduced\u String(字符串s){
对于(int i=0;i

它在大多数情况下都能工作,但是对于某些测试用例,例如如果字符串是“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);
    }
}
static String super\u reduced\u String(字符串s){
对于(int i=0;i

篡改循环计数器总是有点容易出错。因此,我建议避免使用它。

您将I设置为0,但随后到达循环体的末尾,并且在下一个过程中I将递增…啊,我现在明白了,在将I更改为-1而不是0后,代码现在可以工作了,谢谢。