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

LeetCode每日一题系列

题目:828. 统计子串中的唯一字符
难度:困难


文章目录

  • LeetCode每日一题系列
  • 题目
  • 示例
  • 思路
  • 题解


题目

给你一个混合字符串 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])

你可能感兴趣的:(#,算法实例,leetcode,算法,职场和发展,动态规划,python)