【leetcode】1209. Remove All Adjacent Duplicates in String II

题目如下:

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.

解题思路:本题解法不难,利用入栈出栈的思路即可。但有几点注意一下,一是只有长度为k的连续出现的相同的字符才能消除,如果有(k+1)个字符a的话,只能消除k个,留下剩余的一个a;同时注意消除后的相同字符的合并。

代码如下:

class Solution(object):
    def removeDuplicates(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        stack = []
        s += ‘#‘
        last_char = None
        continuous = 1
        for i in s:
            if last_char == None:
                last_char = i
            elif last_char == i:
                continuous += 1
            else:
                stack.append([last_char,continuous])
                last_char = i
                continuous = 1
        #print stack
        for i in range(len(stack)-1,-1,-1):
            if stack[i][1] >= k:
                if stack[i][1] % k == 0:
                    del stack[i]
                else:
                    stack[i][1] = stack[i][1] % k
            if i < len(stack) - 1 and stack[i][0] == stack[i+1][0]:
                stack[i][1] += stack[i+1][1]
                del stack[i+1]
            if i < len(stack) and stack[i][1] >= k:
                if stack[i][1] % k == 0:
                    del stack[i]
                else:
                    stack[i][1] = stack[i][1] % k
        res = ‘‘
        for char,count in stack:
            res += char*count
        return res

原文地址:https://www.cnblogs.com/seyjs/p/11616707.html

时间: 2024-11-05 13:42:53

【leetcode】1209. Remove All Adjacent Duplicates in String II的相关文章

LeetCode 1209. Remove All Adjacent Duplicates in String II

原题链接在这里:https://leetcode.com/problems/remove-all-adjacent-duplicates-in-string-ii/ 题目: 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 delet

【LeetCode】Best Time to Buy and Sell Stock II

Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one sha

1047. Remove All Adjacent Duplicates In String做题报告

题目链接: Remove All Adjacent Duplicates In String 题目大意: 删除字符串中的所有相邻字符 做题报告: (1)该题涉及的算法与数据结构 栈 (2)自己的解答思路+代码+分析时间和空间复杂度 Input: "abbaca" Output: "ca"          思路:使用栈,对字符串遍历,进行入栈出栈操作.如果栈空或者遍历到的该字符与栈顶元素不同则入栈,否则(即遍历到的该字符与栈顶元素相同)出栈.最后,栈存的字符就是我们

【LeetCode】387. First Unique Character in a String

Difficulty:easy  More:[目录]LeetCode Java实现 Description https://leetcode.com/problems/first-unique-character-in-a-string/ Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1. Examples: s =

【leetcode】26. Remove Duplicates from Sorted Array

题目描述: Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. 解题分析: 扫描一遍链表,用一个变量标记已找到的不重复的元

【LeetCode】26. Remove Duplicates from Sorted Array 解题小结

题目: Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. For example,Given input array n

【LeetCode】83 - Remove Duplicates from Sorted Array

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. For example,Given input array nums 

【LeetCode】026. Remove Duplicates from Sorted Array

题目: Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. For example,Given input array n

【LeetCode】83 - Remove Duplicates from Sorted List

Given a sorted linked list, delete all duplicates such that each element appear only once. For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3. Solution: 1 /** 2 * Definition for singly-linked list. 3 * st