算法练习
前言
如果对您有帮助, 请反手一个赞~
力扣算法练习: 字符串中第二大的数字
力扣题目连接: 1796. 字符串中第二大的数字
一、问题描述
给定一个由英文字母和数字(0-9)组成的字符串, 返回其中第二大的数字.
注意点:
- 重复的数字,认为是一个数字, 不重复计算;
- 如果不存在第二大的数字, 返回 -1.
举例:
s = "sa345dfga2425323sdf"
返回结果: 4
二、问题分析
1. 首先需要过滤掉字母
2. 将最大和第二大的数字保存起来, 并在遍历字符串s时, 同步更新最大和第二大的数字
3. 同时记得将数字去重
三、关键点总结
1. 保存最大数字和第二大数字.
- 方案一. 通过使用两个变量, 单独来存储最大数字, 和第二大数字
- 方案二. 使用优先级队列.
python中的 heapq. (heapq可以在 队列中添加新的item的同时, pop除最小的那个元素, 只需要设定队列长度是2, 就可以实现)
2. 数字去重.
- 使用set对数字进行去重.
四、代码实现及注释
class Solution:
def secondHighest(self, s: str) -> int:
hq = [-1, -1]
s_set = set()
for x in s:
if x.isdigit() and x not in s_set:
heapq.heappushpop(hq, int(x)) # 添加新的item的同时, pop除最小的那个元素
s_set.add(x)
return heapq.heappop(hq)
总结
以上就是此次算法练习的全部内容, 感谢阅览, 求点赞~