给你一个混合字符串 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
。然后判断数字与 largestDigit
、secondLargestDigit
的大小关系:
- 若
num > largestDigit
,将secondLargestDigit
更新为largestDigit
,而largestDigit
更新为 num; - 若
num > secondLargestDigit
,并且num < largestDigit
,将secondLargestDigit
更新为 num; - 其他情况不做处理。
最后返回 secondLargestDigit
即可。
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
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;
}
}