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);
}
THE END
二维码