classSolution{publicStringremoveDuplicates(String s,int k){// char -> countStack<Pair<Character,Integer>> stack =newStack();// Make stack non-empty, convenient for the algo.
stack.push(newPair('A',0));for(char c : s.toCharArray()){// Previous char and countchar prev = stack.peek().getKey();int prevCount = stack.peek().getValue();// Previous char is the same as the current, reached kif(!stack.isEmpty()&& prev == c && prevCount +1== k){// Pop k - 1 timesfor(int i =0; i < k -1;++i){if(stack.isEmpty())break;
stack.pop();}}elseif(!stack.isEmpty()&& prev == c){// Previous char is the same as current, haven't reached k
stack.push(newPair(c, prevCount +1));}else{
stack.push(newPair(c,1));}}StringBuilder sb =newStringBuilder();while(stack.size()>1){
sb.append(stack.pop().getKey());}
sb.reverse();return sb.toString();}}