原题指路
字符串中第二大的数字
题目描述
给你一个混合字符串 s
,请你返回 s
中 第二大 的数字,如果不存在第二大的数字,请你返回 -1
。
混合字符串 由小写英文字母和数字组成。
解题思路
这题如果字符串处理的方式比较熟悉的话,做起来还挺容易的。
说来也神奇,这处理字符串的几个函数有些还是我前几天刚学的,结果周赛里马上就用上了。
首先,我们要将字符串中的字母过滤掉,然后再删除其中重复的数字,然后再进行排序,最后就可以直接找到第二大的元素啦~
时间复杂度:
O
(
n
log
n
)
O(n \log{n})
O(nlogn)(还是要看排序的时候还剩下多少数字了)
空间复杂度:
O
(
n
)
O(n)
O(n)(其实可以
O
(
1
)
O(1)
O(1)的,将s
原地操作即可,只是正好顺手没这么写……)
代码
class Solution:
def secondHighest(self, s: str) -> int:
digit = filter(str.isdigit, s) # 过滤英文字母
ss = sorted(list({}.fromkeys(digit).keys())) # 利用字典删除字符串中的重复元素并排序
# 正常分情况返回即可
if len(ss) == 1 or len(ss) == 0:
return -1
else:
return int(ss[-2])