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


    一、题目

    给你一个混合字符串 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值即可。

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

    四、代码实现

    1. class Solution {
    2.     public int secondHighest(String s) {
    3.         int first = -1, second = -1// first:最大值  second:第二大的值
    4.         char[] sc = s.toCharArray();
    5.         for (char c : sc) {
    6.             if (!Character.isDigit(c)) continue;
    7.             if (first > c && c > second) second = c;
    8.             else if (first < c) {
    9.                 second = first;
    10.                 first = c;
    11.             }
    12.         }
    13.         return second == -1 ? second : second - '0';
    14.     }
    15. }

     今天的文章内容就这些了:

    写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

    更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

  • 相关阅读:
    第十九章 Nacos统一配置中心详解
    8+单基因+细胞凋亡+WGCNA+单细胞+实验验证
    JEECMS安装部署方法以及使用说明教程
    JRL数字式交流电流继电器
    Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法
    C++程序练习
    【区块链 | IPFS】IPFS cluster私有网络集群搭建
    使用 Guava Retry 优雅的实现重试机制
    PCB设计---深入浅出的反弹图
    Linux_Shell运行原理(命令行解释器)
  • 原文地址:https://blog.csdn.net/qq_26470817/article/details/128161737