给你一个混合字符串 s
,请你返回 s
中 第二大 的数字,如果不存在第二大的数字,请你返回 -1
。
混合字符串 由小写英文字母和数字组成。
【输入】s = "dfa12321afd"
【输出】2
【解释】出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 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
值即可。
由于本题逻辑比较简单,就不通过画图赘述了。
- 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';
- }
- }
今天的文章内容就这些了:
写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。
更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」