1209J. Remove All Adjacent Duplicates in String II
https://leetcode.com/problems/remove-all-adjacent-duplicates-in-string-ii/
Method
这个题吧,理解题意更重要,k 的 意思是只删除 k 个,不是删除 k 以上个。 我们用两个 stack 一个记录 character ,一个记录频率。
class Solution {
public String removeDuplicates(String s, int k) {
Stack<Character> charStack = new Stack<>();
Stack<Integer> countStack = new Stack<>();
for( char c : s.toCharArray()) {
if( charStack.isEmpty() || charStack.peek() != c ) {
charStack.push(c);
countStack.push(1);
continue;
}
countStack.push(countStack.pop() + 1);
if(countStack.peek() == k) {
countStack.pop();
charStack.pop();
}
}
StringBuilder sb = new StringBuilder();
while( !charStack.isEmpty() ) {
char c = charStack.pop();
int fre = countStack.pop();
for(int i = 0; i < fre; i++) {
sb.append(c);
}
}
return sb.reverse().toString();
}
}
可以只记录频率的其实。
Last updated
Was this helpful?