Iteratethroughcharactersinastringandremoveconsecutiveduplicates

I am trying to iterate through a string and remove consecutive duplicates letter.

ABBACBAABCB-->AACBAABCB-->CBAABCB-->CBBCB-->CCB-->B
ABBACBAABCB-->AACBAABCB-->CBAABCB-->CBBCB-->CCB-->B

My Idea was to iterate through the string and remove duplicates inside a do-while loop.

My code:

Obviously this doesn't work, it simply loop forever.

From what I have gathered you can't do list = results on java as string are immutable.

How can this be done with Java?

回答

您应该使用这样的堆栈。

static String removeConsecutiveDupplicatesLetter(String s) {
    Stack<Character> stack = new Stack<>();
    for (char c : s.toCharArray())
        if (!stack.isEmpty() && stack.peek() == c)
            stack.pop();
        else
            stack.push(c);
    return stack.stream().map(String::valueOf).collect(Collectors.joining());
}

String s = "ABBACBAABCB";
System.out.println(removeConsecutiveDupplicatesLetter(s));

结果:

B

这就像这样。

stack    c
-------  -
[]       A 
[A]      B
[A B]    B
[A]      A
[]       C
[C]      B
[C B]    A
[C B A]  A
[C B]    B
[C]      C
[]       B
[B]

您也可以char[]用作堆栈而不是Stack.

static String removeConsecutiveDupplicatesLetter(String s) {
    int length = s.length();
    char[] stack = new char[length];
    int index = 0;
    for (char c : s.toCharArray())
        if (index > 0 && stack[index - 1] == c)
            --index;
        else
            stack[index++] = c;
    return new String(stack, 0, index);
}


以上是Iteratethroughcharactersinastringandremoveconsecutiveduplicates的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>