华为OD机试之非严格递增连续数字序列(Java源码)
非严格递增连续数字序列
题目描述
输入一个字符串仅包含大小写字母和数字,求字符串中包含的最长的非严格递增连续数字序列的长度,(比如12234属于非严格递增连续数字序列)。
输入描述
输入一个字符串仅包含大小写字母和数字,输入的字符串最大不超过255个字符。
输出描述
最长的非严格递增连续数字序列的长度
| 输入 | 输出 | 说明 |
|---|---|---|
| abc2234019A334bc | 4 | 2234为最长的非严格递增连续数字序列,所以长度为4。 |
源码和解析
解析:
可以用双指针来做 根据自己需求来 如果对指针使用不是很擅长的。可以考虑不用指针
示例代码1:
public class T18 {
public static void main(String[] args) {
String input = "abc2234567019A334bc";
int left = 0;
int right = 0;
int max = 0;
for (int i = 0; i < input.length() - 1; i++) {
if (input.charAt(right + 1) - input.charAt(right) == 1
|| input.charAt(right + 1) - input.charAt(right) == 0) {
right++;// 右指针右移一个
} else {
right++;
if (right - left > max) {
max = right - left;
}
left = right;
}
}
System.out.println(max);
}
}
示例代码2:
public class T18_1 {
public static void main(String[] args) {
String input = "abc2234019A33455bc";
getPrefix(input);
}
// 获取字符串开始连续字符串
public static void getPrefix(String input) {
StringBuilder str = new StringBuilder();
char lastCharacter = input.charAt(0);// 自后一个字符;
str.append(lastCharacter);
int max = 0;
for (int i = 1; i < input.length(); i++) {
if (input.charAt(i) - lastCharacter == 1
|| input.charAt(i) - lastCharacter == 0) {
str.append(input.charAt(i) + "");
lastCharacter = input.charAt(i);
} else {
// System.out.println(str.toString()+"_");
if (str.toString().length() > max) {
max = str.toString().length();
}
str.setLength(0);// 清空
str.append(input.charAt(i) + "");
lastCharacter = input.charAt(i);
}
}
System.out.println("最值:" + max);
}
}