leetcode 394 字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: 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)
leetcode 933 最近的请求次数
写一个 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)