华为机试-在字符串中找出连续最长的数字串

题目描述
样例输出
输出123058789,函数返回值9
输出54761,函数返回值5

接口说明
函数原型:
unsignedint Continumax(char** pOutputstr, char* intputstr)
输入参数:
char* intputstr 输入字符串;
输出参数:
char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;
如果输入字符串是空,也应该返回空字符串;
返回值:
连续最长的数字串的长度



输入描述:
输入一个字符串。


输出描述:
输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度

输入例子:
abcd12345ed125ss123058789

输出例子:
123058789,9

Java代码实现

  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. import java.util.Scanner;  
  4.   
  5. /** 
  6.  * 在字符串中找出连续最长的数字串 
  7.  *  
  8.  * @author WWJ 
  9.  * 
  10.  */  
  11. public class Main {  
  12.   
  13.     public static void main(String[] args) {  
  14.         // TODO Auto-generated method stub  
  15.         Scanner sc = new Scanner(System.in);  
  16.   
  17.         while (sc.hasNextLine()) {  
  18.             String string = sc.nextLine();  
  19.             StringBuilder stringBuilder = new StringBuilder();  
  20.             int num = continumax(stringBuilder, string);  
  21.             if (num != 0) {  
  22.                 System.out.println(stringBuilder.toString() + "," + num);  
  23.             } else {  
  24.                 System.out.println(0);  
  25.             }  
  26.   
  27.         }  
  28.     }  
  29.   
  30.     private static int continumax(StringBuilder stringBuilder, String string) {  
  31.         List<Integer> start = new ArrayList<>();  
  32.         List<Integer> end = new ArrayList<>();  
  33.   
  34.         int max = 0;  
  35.         int currStart = 0;  
  36.         int currEnd = 0;  
  37.         boolean findFirst = false;  
  38.         for (int i = 0; i < string.length(); i++) {  
  39.             if (string.charAt(i) >= '0' && string.charAt(i) <= '9') {  
  40.                 if (!findFirst) {  
  41.                     findFirst = true;  
  42.                     currStart = i;  
  43.                 }  
  44.   
  45.                 if (i == string.length() - 1) {  
  46.                     currEnd = i;  
  47.                     if (currEnd - currStart + 1 > max) {  
  48.                         start.clear();  
  49.                         end.clear();  
  50.                         start.add(currStart);  
  51.                         end.add(currEnd);  
  52.   
  53.                         max = currEnd - currStart + 1;  
  54.                     } else if (currEnd - currStart + 1 == max) {  
  55.                         start.add(currStart);  
  56.                         end.add(currEnd);  
  57.                     }  
  58.                     findFirst = false;  
  59.                 }  
  60.   
  61.             } else {  
  62.                 if (findFirst) {  
  63.                     currEnd = i - 1;  
  64.                     if (currEnd - currStart + 1 > max) {  
  65.                         start.clear();  
  66.                         end.clear();  
  67.                         start.add(currStart);  
  68.                         end.add(currEnd);  
  69.   
  70.                         max = currEnd - currStart + 1;  
  71.                     } else if (currEnd - currStart + 1 == max) {  
  72.                         start.add(currStart);  
  73.                         end.add(currEnd);  
  74.                     }  
  75.                     findFirst = false;  
  76.                 }  
  77.   
  78.             }  
  79.         }  
  80.         if (max != 0) {  
  81.             for (int i = 0; i < start.size(); i++) {  
  82.                 if (end.get(i) == string.length()) {  
  83.                     stringBuilder.append(string.substring(start.get(i)));  
  84.                 } else {  
  85.                     stringBuilder.append(string.substring(start.get(i), end.get(i) + 1));  
  86.                 }  
  87.             }  
  88.   
  89.         }  
  90.   
  91.         return max;  
  92.     }  
  93.   
  94. }  
原文地址:https://www.cnblogs.com/wwjldm/p/7098437.html