1796. 字符串中第二大的数字

本文介绍了一种通过Python实现的方法来找出混合字符串中第二大的数字。提供了两种解决方案,一种是通过排除所有非数字字符并排序剩余数字来找到答案,另一种是在遍历字符串时直接过滤并收集数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1796. 字符串中第二大的数字

给你一个混合字符串 s ,请你返回s中第二大的数字,如果不存在第二大的数字,请你返回 -1 。

混合字符串由小写英文字母和数字组成。
在这里插入图片描述
此题用暴力法解决有两种思路:

方法1:

class Solution(object):
    def secondHighest(self, s):
        res=list(s)
        ans=[]
        num=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
        for i in num:
            if i in num and i in res:
                ans.append(i)
        ans1=[i for i in res if (i not in ans)]
        ans2=list(set(ans1))
        ans2.sort(reverse=True)
        #print(ans2)
        return int(ans2[1]) if len(ans2)>=2 else -1

此题中,想直接在res上将存在于num中的值进行移除,开始想使用remove,发现for循环中尽量不要使用remove操作,因为在遍历过程中删除某个元素之后,会将它后面的元素向前移动一位,而for循环是继续遍历下一个位置的,所以遍历过程中会有遗漏。
因此最终使用了给一个空列表进行append的方式来替代remove的作用。

方法2:

class Solution:
    def secondHighest(self, s: str) -> int:
        res=[]
        num=["1","2","3","4","5","6","7","8","9","0"]
        for i in s:
            if i in num and int(i) not in res:
                res.append(int(i))
            else:
                pass
        res.sort(reverse=True)
        return res[1] if len(res)>=2 else -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值