题目描述
连续最长的数字串的长度
输入描述:
输入一个字符串
输出描述:
输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度
示例:
输入:abcd12345ed125ss123058789
输出:123058789,9
思路:本来以为这可以理解成是一个最长递增子序列的变形题,但是其实又更简单的方法:将所有非数字的字符用"a"代替,然后以"a"为分割点分割字符串即可。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
char[] ch = sc.next().toCharArray();
StringBuffer sb = new StringBuffer();
for(int i = 0; i < ch.length; i++){
if(ch[i] >= '0' && ch[i] <= '9')
sb.append(ch[i]);
else sb.append('a');
}
String[] s = sb.toString().split("a");
int max = 0;
for(int i = 0; i < s.length; i++){
if(s[i].length() > max) max = s[i].length();
}
for(int i = 0; i < s.length; i++){
if(s[i].length() == max) System.out.print(s[i]);
}
System.out.println("," + max);
/*String[] s = sc.next().split("");
ArrayList<String> list = new ArrayList<>();
int max = 0;
int[] f = new int[s.length + 1];
for(int i = 1; i < f.length; i++){
if(s[i - 1].matches("[0-9]")) f[i] = f[i - 1] + 1;
else f[i] = 0;
if(f[i] > max) max = f[i];
}
StringBuffer sb = new StringBuffer();
for(int i = 1; i < f.length; i++){
if(f[i] == max){
for(int j = i - max; j < i; j++)
sb.append(s[j]);
}
}
System.out.println(sb + "," + max);*/
}
sc.close();
}
}
代码: