给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string]
,表示其中方括号内部的 encoded_string
正好重复 k
次。注意 k
保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。
此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k
,例如不会出现像 3a
或 2[4]
的输入。
示例 1:
输入:s = "3[a]2[bc]" 输出:"aaabcbc"示例 2:
输入:s = "3[a2[c]]" 输出:"accaccacc"示例 3:
输入:s = "2[abc]3[cd]ef" 输出:"abcabccdcdcdef"示例 4:
输入:s = "abc3[cd]xyz" 输出:"abccdcdcdxyz"
就是除了“]”以外一律进栈,遇到“]”先把对应的上一个“[”之前的字母全部弹出去,翻转
别忘了把“[”也弹出去
然后再把前面的数字全部弹出去,反转
搞一个字符串乘法,over
- class Solution(object):
- def decodeString(self, s):
- """
- :type s: str
- :rtype: str
- """
- # 数字、左括号、字母进栈,右括号出栈
- stack = []
- for i in range(len(s)):
- if s[i] != ']':
- stack.append(s[i])
- else:
- temp_stack = []
- while stack and stack[-1] != '[':
- temp_stack.append(stack.pop())
- stack.pop() # 把左括号弹出去
- temp_stack.reverse()
- num = []
- while stack and stack[-1].isdigit():
- num.append(stack.pop())
- num.reverse()
- print(temp_stack, num, stack)
- if num and temp_stack:
- stack += int(''.join(num)) * ''.join(temp_stack)
- elif temp_stack:
- stack += ''.join(temp_stack)
- stack = list(stack)
- return ''.join(stack)
写一个 RecentCounter
类来计算特定时间范围内最近的请求。
请你实现 RecentCounter
类:
RecentCounter()
初始化计数器,请求数为 0 。int ping(int t)
在时间 t
添加一个新请求,其中 t
表示以毫秒为单位的某个时间,并返回过去 3000
毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t]
内发生的请求数。保证 每次对 ping
的调用都使用比之前更大的 t
值。
示例 1:
输入: ["RecentCounter", "ping", "ping", "ping", "ping"] [[], [1], [100], [3001], [3002]] 输出: [null, 1, 2, 3, 3] 解释: RecentCounter recentCounter = new RecentCounter(); recentCounter.ping(1); // requests = [1],范围是 [-2999,1],返回 1 recentCounter.ping(100); // requests = [1, 100],范围是 [-2900,100],返回 2 recentCounter.ping(3001); // requests = [1, 100, 3001],范围是 [1,3001],返回 3 recentCounter.ping(3002); // requests = [1, 100, 3001, 3002],范围是 [2,3002],返回 3
很基础的队列题
- class RecentCounter(object):
-
- def __init__(self):
- self.queue = deque() # 双端队列
-
- def ping(self, t):
- """
- :type t: int
- :rtype: int
- """
- while self.queue and t - self.queue[0] > 3000:
- self.queue.popleft()
- self.queue.append(t)
- return len(self.queue)
-
-
- # Your RecentCounter object will be instantiated and called as such:
- # obj = RecentCounter()
- # param_1 = obj.ping(t)