华为OD机试之非严格递增连续数字序列(Java源码)

非严格递增连续数字序列

题目描述

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

输入描述

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

输出描述

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

输入输出说明
abc2234019A334bc42234为最长的非严格递增连续数字序列,所以长度为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);
	}
}