如题,给定一个字符串,求字符串中最长连续递增的数字子串的长度。
字符串全部由小写字母和数字组成。
- 用例1:1234aa12345ab123456
结果:6。 ps:最长连续递增的数字子串为123456 - 用例2:bv1234aa412345ab341234567
结果:7。 ps:最长连续递增的数字子串为1234567 - 用例3:54345689bv12345cd2123545454789
结果:6。 ps:最长连续递增的数字子串为345689
题解:
由上题描述可知,求字符串中最长连续递增的数字子串的长度。
所以可以直接定义一个计数长度的变量和计数最大长度的变量。
然后遍历字符串,如果当前的字符为数字的情况下,前一个字符如果为数字且小于当前数字,则计数长度+1。如果当前的字符为数字的情况下,前一个字符如果为数字且大于等于当前数字(或前一个字符不为数字),则更新计数最大长度且将计数长度重置为1.
完整代码如下:
package com.example.testlib1;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String testStr1 = "1234aa12345ab123456";
int len1 = maxLength(testStr1);
System.out.println("len1:"+len1);
String testStr2 = "bv1234aa412345ab341234567";
int len2 = maxLength(testStr2);
System.out.println("len2:"+len2);
String testStr3 = "54345689bv12345cd2123545454789";
int len3 = maxLength(testStr3);
System.out.println("len3:"+len3);
}
public static int maxLength(String testStr) {
// 将字符串转为字符数组方便遍历
char[] arr = testStr.toCharArray();
// 定义变量,计数最大长度
int max = 0;
// 定义变量,计数当前长度
int len = 0;
List<Integer> list = new ArrayList<>();
// 如果字符数组的第一个元素为数字,则计数+1. 方便后续遍历字符数组时索引从1开始
if(Character.isDigit(arr[0])) {
len ++;
}
// 遍历字符数组时,索引从1开始,避免i-1小于0的情况。
for(int i=1;i<arr.length;i++) {
if(Character.isDigit(arr[i])) {
// 如果当前的字符为数字的情况下,前一个字符如果为数字且小于当前数字,
// 则计数长度+1.
// 如果当前的字符为数字的情况下,前一个字符如果为数字且大于等于当前数字(或前一个字符不为数字),
// 则更新计数最大长度且将计数长度重置为1.
if (Character.isDigit(arr[i-1]) && arr[i]>arr[i-1]) {
len++;
} else {
max = Math.max(max, len);
len = 1;
}
}
}
// 遍历完毕后,处理最后一次计数的情况
if (len != 0) {
max = Math.max(max, len);
}
return max;
}
}