非严格递增连续数字序列-华为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
输出: