题目:828. 统计子串中的唯一字符
难度:困难
给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。
混合字符串 由小写英文字母和数字组成。
示例 1:
输入:s = “dfa12321afd”
输出:2
解释:出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 2 。
示例 2:
输入:s = “abc1111”
输出:-1
解释:出现在 s 中的数字只包含 [1] 。没有第二大的数字。
提示:
1 <= s.length <= 500
s 只包含小写英文字母和(或)数字。
题目意思很简单,就是找出给定由小写字母和数字组成的字符串中,数字排名第二大的数字即可。在这里注意,题中所给的例子很容易造成误解为第二大为从左往右第二大,实际上该题求的是从右往左第二大。
我们从左往右依次遍历给定字符串,判断如果是数字加入一个set集合中,最后再给set集合排序,取倒数第二个元素返回即可。如果set的长度小于等于1,那就只能返回-1了。
class Solution:
def secondHighest(self, s: str) -> int:
ans = set()
# 查找数字元素
for i in range(len(s)):
if 48<=ord(s[i])<=57:
ans.add(s[i])
# 返回-1
if len(ans) <= 1:
return -1
# 返回第二大元素
else:
return int(sorted(ans)[-2])