非严格递增连续数字序列

本文介绍了如何在Java中解决一个算法问题,即给定一个只包含字母和数字的字符串,找出其中最长的非严格递增连续数字序列的长度。作者通过示例代码展示了实现过程和测试用例。
摘要由CSDN通过智能技术生成

非严格递增连续数字序列-华为OD


前言

本人最近再练习算法,所以会发布一些解题思路,希望大家多指教

一、题目描述?

输入一个字符串仅包含大小写字母和数字,求字符串中包含的最长的非严格递增连续数字序列的长度,

(比如12234属于非严格递增连续数字序列)。

二、输入描述:

输入一个字符串仅包含大小写字母和数字,输入的字符串最大不超过255个字符。

三、输出描述:

最长的非严格递增连续数字序列的长度

四、java代码

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //获取字符串
        String line = scanner.nextLine();
        //初始化最长的数字序列长度
        int maxLen = 0;
        //字符串长度为1,且是数字
        if(line.length() == 1 && line.charAt(0) - '0' >=0 && line.charAt(0) - '0' <=9){
            System.out.println(1);
            return;
        }
        boolean flag = false;
        for (int i = 0; i < line.length() -1; i++) {
            int curNum = line.charAt(i) - '0';
            if(curNum >= 0 && curNum <= 9){
            	//遍历到最后一个数字都没找到符合要求的序列,则当前数字为符合要求的最小序列
            	if(maxLen == 0 && i == line.length() - 1){
                       maxLen = 1;
                       break;
                }
            	//初始化符合要求的连续递增数字序列长度,初始值设置为1,因为当前元素为数字
                int num = 1;
                //依次比较相邻元素是否满足非严格递增条件
                int j = i+1;
                while (j < line.length() && line.charAt(j) - '0' >= 0
                        && line.charAt(j) - '0' <= 9 && curNum <= line.charAt(j) - '0'){
                    //将当前元素赋值给curNum,作为下一次比较的左边元素
                    curNum = line.charAt(j) - '0';
                    j++;
                    num++;
                    flag = true;
                }
                //存在非严格递增序列,且长度大于已知最大序列长度
                if(flag && maxLen < num){
                    maxLen = num;
                    flag = false;
                }
                i = j - 1;
            }
        }
        System.out.println(maxLen);
    }

五、测试用例

输入:acbnd12345447de345
输出:
在这里插入图片描述
输入:334ssa89
输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值