图解LeetCode——1796. 字符串中第二大的数字(难度:简单)

2023-05-10 13:17:02 浏览数 (1)

一、题目

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

混合字符串 由小写英文字母和数字组成。

二、示例

2.1> 示例 1:

【输入】s = "dfa12321afd" 【输出】2 【解释】出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 2 。

2.2> 示例 2:

【输入】s = "abc1111" 【输出】-1 【解释】出现在 s 中的数字只包含 [1] 。没有第二大的数字。

提示:

  • 1 <= s.length <= 500
  • s 只包含小写英文字母和(或)数字。

三、解题思路

根据题目描述,要获取第二大的数字,并且字符串s中也存在字母类型的字符,所以我们需要执行如下几个步骤:

步骤1】遍历字符串s中的每个字符,通过Character.isDigit(c)来判断字符是否是数字类型的。 【步骤2】创建两个变量,分别:first(最大值)和second(第二大的值) 【步骤3】如果遍历的字符c,如果满足:first > c && c > second,则更新second=c;如果满足:first < c,则更新second=first 并且 更新first=c步骤4】返回second值即可。

由于本题逻辑比较简单,就不通过画图赘述了。

四、代码实现

代码语言:javascript复制
class Solution {
    public int secondHighest(String s) {
        int first = -1, second = -1; // first:最大值  second:第二大的值
        char[] sc = s.toCharArray();
        for (char c : sc) {
            if (!Character.isDigit(c)) continue;
            if (first > c && c > second) second = c;
            else if (first < c) {
                second = first;
                first = c;
            }
        }
        return second == -1 ? second : second - '0';
    }
}

0 人点赞