题解 | #在字符串中找出连续最长的数字串#

在字符串中找出连续最长的数字串

https://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec

Life is short, you need Stream

import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<String> list = new ArrayList<String>();
        while (in.hasNextLine()) {
            String[] strs = in.nextLine().split("[^0-9]+");
            final int max =  Arrays.stream(strs)
                             .max(Comparator.comparingInt(String::length)).get().length();
            Arrays.stream(strs).filter(x -> x.length() == max).forEach(System.out::print);
            System.out.println("," + max);
        }
    }
}

模拟

import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<String> list = new ArrayList<String>();
        while (in.hasNextLine()) {
            System.out.println(longestDigitSubstring(in.nextLine(), list));
        }
    }

    static String longestDigitSubstring(String s, List<String> list) {
        boolean flag = false;
        int max = 0;
        for (int i = 0, k = 0; i < s.length(); i++) {
            // 遇到数字且数字子串还没开始 则标记数字子串开始及开始的下标
            if (Character.isDigit(s.charAt(i)) && !flag) {
                k = i;
                flag = true;
            }
            // 如果遇到字母且数字子串已经开始 则标记数字子串结束 并将子串记录
            if (Character.isLetter(s.charAt(i)) && flag) {
                list.add(s.substring(k, i));
                max = Math.max(max, i - k);
                flag = false;
            }
            // 走到最后
            if (i == s.length() - 1 && Character.isDigit(s.charAt(i))) {
                list.add(s.substring(k));
                max = Math.max(max, s.length() - k);
            }
        }
        final int m = max;
        StringBuilder sb = new StringBuilder();
        sb.append(list.stream()
                  .filter(x -> x.length() == m)
                  .reduce((x, y) -> x + y)
                  .orElse(null));
        list.clear();
        return sb.append(",").append(max).toString();
    }
}
#华为笔试#
全部评论

相关推荐

10-22 19:44
门头沟学院 Java
面了100年面试不知...:那我得去剪个头
点赞 评论 收藏
分享
bg27强双非本,目前在学习golang后端gin框架部分,在b站找了一个轮子项目敲了一下,技术栈是gin&nbsp;+&nbsp;gorm&nbsp;+&nbsp;mysql&nbsp;+&nbsp;redis。我目前的想法是这一个月学习408和go八股以及刷算法然后在12月找个寒假实习然后大三下开始准备考研。我是考研意愿比较强烈,想问一下我是应该all&nbsp;in其中一个方向吗,我感觉我实习对我考研来说也是没什么帮助的好像。
牛客28967172...:毕业工作,考研,考公是完全不同的方向。 99%的人拼尽全力也只能把一个做好(能做好都已经是佼佼者了,比如进进大厂,考985或者考公) 如果你确定要考研可以不用学任何就业技术框架,也不用实习经验,刷题背知识点就行,但注意必须考92院校起步,因为这个年代双非硕毕业后完全不如双非本(互联网行业),可以说双非硕在互联网就业完全是负收益
投递哔哩哔哩等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务