题目:
HJ92 在字符串中找出连续最长的数字串
题解:
- 找到第一个数字
- 从第一个数字开始往后遍历,每走一步判断当前是否为数字,是数字就累加cnt
- 如果当前位置不是数字,证明连续数字串已经断开,此时需要记录最长数字串,并清空cnt
- 结束后如果cnt不等于0需要再次记录最长数字串,因为只有在出现非数字才会更新cnt,如果以数字结尾就会导致最后一段没记录上,所以结束之后需要进行一次补偿
public void getMaxNumberSubString(String string) {StringBuilder sb = new StringBuilder();int max = 0;int cnt = 0;int start = 0;for (int i = 0; i < string.toCharArray().length; i++) {if (Character.isDigit(string.toCharArray()[i])) {start = i;break;}}for (int i = start + 1; i < string.toCharArray().length; i++) {if (Character.isDigit(string.toCharArray()[i])) {cnt++;} else {String subString = string.substring(start, i);if (subString.length() > max) {max = subString.length();sb.setLength(0);sb.append(subString);} else if (subString.length() == max) {sb.append(subString);}start = i + 1;cnt = 0;}}if (cnt != 0) {String subString = string.substring(start);if (subString.length() > max) {max = subString.length();sb.setLength(0);sb.append(subString);} else if (subString.length() == max) {sb.append(subString);}}System.out.printf("%s,%s\n", sb, max);}
时间复杂度:O(n)