LeetCode每日一题——1796. 字符串中第二大的数字

LeetCode每日一题系列

题目: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])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyk今天写算法了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值