算法日志 --- 12.03---字符串中第二大的数字

100 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

让我看看是谁周六还要上班的,哦原来是我自己,小丑竟是我自己

字符串中第二大的数字

该题出自力扣的1769题 —— 字符串中第二大的数字【简单题】

审题

给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。 混合字符串 由小写英文字母和数字组成

  • 这道题题目简单,相对的也不困难,毕竟就是个简单题。就是给出一个小写字母和数字组成的字符串,做出其中的数字,并且返回第二大的数字
  • 定义两个变量,记录第一大和第二大的数值
    • 把字符串转换成字符数组
    • 遍历字符数组,提前定义一个字符串,内包含所有的数字,从0到9
    • 判断字符串内是否存在字符,也就是作为判断当前字符是否作为数字存在
    • 判断是否大于 第一大的变量,如果大于,则需要覆盖first变量,并且second变量也需要替换
    • 是否小于第一大变量,大于第二大变量,那么替换第二大
    • 最后返回变量
  • 也可以利用API去实现判断是否作为数字,那就是使用Character.isLetter()方法,直接判断当前字符,那就不需要定义字符串和indexOdf方法了
  • 要找出第二大的先找第一大的,如果又找到了一个比他大的那就退位让贤,把第一大的让给第二大的!!注意如果一开始就找到了第一大的,那就要另外再去找第二大的!!

编码

class Solution {
    String a = "0123456789";
    
    public int secondHighest(String s) {
        int second = -1;
        int first = -1;
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            String s1 = String.valueOf(chars[i]);
            if (a.contains(s1)){
                int i1 = Integer.parseInt(s1);
                if (first < i1){
                    second = first;
                    first = i1;
                } else if (first > i1 && second < i1){
                    second = i1;
                }
            }
        }
        return second;
    }
}

image.png