• Python算法练习 10.11


    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

    1. class Solution(object):
    2. def decodeString(self, s):
    3. """
    4. :type s: str
    5. :rtype: str
    6. """
    7. # 数字、左括号、字母进栈,右括号出栈
    8. stack = []
    9. for i in range(len(s)):
    10. if s[i] != ']':
    11. stack.append(s[i])
    12. else:
    13. temp_stack = []
    14. while stack and stack[-1] != '[':
    15. temp_stack.append(stack.pop())
    16. stack.pop() # 把左括号弹出去
    17. temp_stack.reverse()
    18. num = []
    19. while stack and stack[-1].isdigit():
    20. num.append(stack.pop())
    21. num.reverse()
    22. print(temp_stack, num, stack)
    23. if num and temp_stack:
    24. stack += int(''.join(num)) * ''.join(temp_stack)
    25. elif temp_stack:
    26. stack += ''.join(temp_stack)
    27. stack = list(stack)
    28. 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

     很基础的队列题

    1. class RecentCounter(object):
    2. def __init__(self):
    3. self.queue = deque() # 双端队列
    4. def ping(self, t):
    5. """
    6. :type t: int
    7. :rtype: int
    8. """
    9. while self.queue and t - self.queue[0] > 3000:
    10. self.queue.popleft()
    11. self.queue.append(t)
    12. return len(self.queue)
    13. # Your RecentCounter object will be instantiated and called as such:
    14. # obj = RecentCounter()
    15. # param_1 = obj.ping(t)

  • 相关阅读:
    【Note】二叉树的遍历
    【数据结构与算法】并查集
    【无标题】
    全网echarts案例资源大总结和echarts的高效使用技巧(细节版)
    【面试题】 你不知道的JavaScript基础类型
    【OneDrive篇】OneDrive禁用个人保管库(网页端)
    动态表单设计
    京东11.11真便宜闭眼买,联合众品牌共倡“真低价”
    2022年高教社杯数学建模竞赛A题 B题 C题 D题 E题思路
    SPARK中的wholeStageCodegen全代码生成--以aggregate代码生成为例说起(3)
  • 原文地址:https://blog.csdn.net/Michelle209/article/details/133778625