一、题目
给你一个混合字符串 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';
}
}