Skip to content

Latest commit

 

History

History
105 lines (75 loc) · 2.98 KB

File metadata and controls

105 lines (75 loc) · 2.98 KB

English Version

题目描述

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

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

 

示例 1:

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

示例 2:

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

 

提示:

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

解法

假设字符串最大的数为 largestDigit,第二大的数为 secondLargestDigit,初始化均为 -1。

遍历字符串,判断当前字符是否为数字型字符。若是,先转为数字 num。然后判断数字与 largestDigitsecondLargestDigit 的大小关系:

  • num > largestDigit,将 secondLargestDigit 更新为 largestDigit,而 largestDigit 更新为 num;
  • num > secondLargestDigit,并且 num < largestDigit,将 secondLargestDigit 更新为 num;
  • 其他情况不做处理。

最后返回 secondLargestDigit 即可。

Python3

class Solution:
    def secondHighest(self, s: str) -> int:
        largest_digit = second_largest_digit = -1
        for c in s:
            if c.isdigit():
                num = int(c)
                if num > largest_digit:
                    second_largest_digit, largest_digit = largest_digit, num
                elif num > second_largest_digit and num < largest_digit:
                    second_largest_digit = num
        return second_largest_digit

Java

class Solution {
    public int secondHighest(String s) {
        int largestDigit = -1, secondLargestDigit = -1;
        for (int i = 0; i < s.length(); ++i) {
            char c = s.charAt(i);
            if (c >= '0' && c <= '9') {
                int num = c - '0';
                if (num > largestDigit) {
                    secondLargestDigit = largestDigit;
                    largestDigit = num;
                } else if (num > secondLargestDigit && num < largestDigit) {
                    secondLargestDigit = num;
                }
            }
        }
        return secondLargestDigit;
    }
}

...