|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- Given a string s, a k duplicate removal consists of choosing k adjacent and equal letters from s and removing them causing the left and the right side of the deleted substring to concatenate together.
- We repeatedly make k duplicate removals on s until we no longer can.
- Return the final string after all such duplicate removals have been made.
- It is guaranteed that the answer is unique.
-
- Example 1:
- Input: s = "abcd", k = 2
- Output: "abcd"
- Explanation: There's nothing to delete.
- Example 2:
- Input: s = "deeedbbcccbdaa", k = 3
- Output: "aa"
- Explanation:
- First delete "eee" and "ccc", get "ddbbbdaa"
- Then delete "bbb", get "dddaa"
- Finally delete "ddd", get "aa"
- Example 3:
- Input: s = "pbbcggttciiippooaais", k = 2
- Output: "ps"
-
- Constraints:
- 1 <= s.length <= 10^5
- 2 <= k <= 10^4
- s only contains lower case English letters.
复制代码
- class Solution {
- public String removeDuplicates(String s, int k) {
- Stack <Character> stack_c = new Stack<>();
- Stack <Integer> stack_n = new Stack<>();
-
- for(int i = 0; i < s.length(); i++){
-
- if(!stack_c.isEmpty() && stack_c.peek() == s.charAt(i)){
-
- stack_n.push(stack_n.peek()+1);
- }else{
-
- stack_n.push(1);
- }
-
- stack_c.push(s.charAt(i));
-
- if(stack_n.peek() == k){
-
- for(int j = 0; j< k ; j++){
-
- stack_n.pop();
- stack_c.pop();
- }
- }
- }
-
- StringBuilder ret = new StringBuilder();
-
- while(!stack_c.isEmpty()){
-
- ret.append(stack_c.pop());
- }
-
- return ret.reverse().toString();
- }
- }
复制代码 |
|