题目描述
样例输出
输出123058789,函数返回值9
输出54761,函数返回值5
接口说明
函数原型:
unsignedint Continumax(char** pOutputstr, char* intputstr)
输入参数:
char* intputstr 输入字符串;
输出参数:
char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;如果输入字符串是空,也应该返回空字符串;
返回值:
连续最长的数字串的长度
输入描述:
输入一个字符串。
输出描述:
输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度
示例1
输入
abcd12345ed125ss123058789
输出
123058789,9
代码如下:
1 package com.yzh.hehe; 2 3 import java.util.LinkedList; 4 import java.util.List; 5 import java.util.Scanner; 6 7 public class FindLongestNumberStr { 8 9 public static void main(String[] args) { 10 Scanner scanner=new Scanner(System.in); 11 while (scanner.hasNext()) { 12 System.out.println(findLongestNumStr(scanner.nextLine())); 13 } 14 scanner.close(); 15 } 16 17 // 遍历输入字符串,用一个stringBuilder来记录连续的数字字符串,得到一个数字字符串先判断其length是否大于记录链表reList的第一个string的长度, 18 //如果大于等于就把最新的数字字符串添加为reList的第一个位置上,否则不做任何操作,这样最后reList的第一个位置上的就是结果字符串(存在相同长度就是最前面几个) 19 20 private static String findLongestNumStr(String string) { 21 if (string==null||"".equals(string)) { 22 return ""; 23 } 24 List<String>reList=new LinkedList<String>();//记录字符串 25 char[] cArr=string.toCharArray(); 26 StringBuilder stringBuilder=new StringBuilder(); 27 for (int i = 0; i <cArr.length; i++) { 28 //处理到一个数字字符串的末尾字符时,记录链表reList为空就直接添加到第一个位置上,否则就判断长度来处理 29 if (!(cArr[i]>='0'&&cArr[i]<='9')) { 30 if (reList.size()==0) { 31 reList.add(stringBuilder.toString()); 32 33 }else if (stringBuilder.length()!=0&&stringBuilder.length()>=reList.get(0).length()) { 34 reList.add(0, stringBuilder.toString()); 35 } 36 stringBuilder.delete(0, stringBuilder.length()); 37 }else if ((cArr[i]>='0'&&cArr[i]<='9')) { 38 stringBuilder.append(cArr[i]);//只要是数字字符就可以向stringBuilder里添加 39 } 40 41 } 42 //处理整个字符串一数字字符串结尾的情况,要单独处理这种情况 43 if (stringBuilder.length()!=0&&reList.size()==0) { 44 reList.add(stringBuilder.toString()); 45 }else if (stringBuilder.length()!=0&&stringBuilder.length()>=reList.get(0).length()) { 46 reList.add(0, stringBuilder.toString()); 47 } 48 int length=stringBuilder.length(); 49 stringBuilder.delete(0, stringBuilder.length()); 50 51 for (String temp : reList) { 52 if (temp.length()==length) { 53 stringBuilder.insert(0, temp); 54 }else{ 55 break; 56 } 57 } 58 if (string.length()==0) { 59 return ""; 60 } 61 stringBuilder.append(","+length); 62 return stringBuilder.toString(); 63 64 } 65 66 }
网络上见识更Java的做法:
将不是数字的字符全部变成‘a’,再将字符串用a来分割称数组,长度最大的数组的长度即为所求的长度,
1 2 import java.util.*; 3 public class Main{ 4 public static void main(String[] args) { 5 6 Scanner scan=new Scanner(System.in); 7 while(scan.hasNext()) 8 { 9 String str1=""; 10 String str=scan.nextLine(); 11 for(char ch:str.toCharArray()){ 12 //将不是数字的字符全部变成a 13 if(ch>='0' && ch<='9'){ 14 str1+=ch; 15 }else{ 16 str1+="a"; 17 } 18 } 19 //按a分割 20 String[] strs=str1.split("a"); 21 int max=0;//记录最长的连续数字串的长度 22 for(int i=0;i<strs.length;i++){ 23 max=strs[i].length()>max?strs[i].length():max; 24 } 25 for(int i=0;i<strs.length;i++){ 26 if(strs[i].length()==max) 27 System.out.print(strs[i]); 28 } 29 System.out.println(","+max); 30 } 31 } 32 }
浙公网安备 33010602011771号