首页 > 试题广场 >

字符串中找出连续最长的数字串

[编程题]字符串中找出连续最长的数字串
  • 热度指数:41510 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
读入一个字符串str,输出字符串str中的连续最长的数字串

输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。


输出描述:
在一行内输出str中里连续最长的数字串。
示例1

输入

abcd12345ed125ss123456789

输出

123456789
明明用例测试都是对的为什么不通过呢,有大佬帮忙看看嘛

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) {
            char[] chr1 = new char[255];
            char[] chr2 = new char[255];
            int length1 = 0;
            int length2 = 0;
            String cinStr = in.nextLine();
            for (int i = 0; i < cinStr.length(); i++) {
                char temp = cinStr.charAt(i);
                if (temp >= 48 && temp <= 57) {
                    int index = 0;
                    if (length1 <= length2) {
                        chr1[index] = temp;
                        for (int j = i + 1; j < cinStr.length(); j++) {
                            if (cinStr.charAt(j) == cinStr.charAt(j - 1) + 1) {
                                chr1[++index] = cinStr.charAt(j);
                                i = j + 1;
                                length1 = index;
                            } else {
                                i = j - 1;
                                break;
                            }
                        }
                    } else {
                        chr2[index] = temp;
                        for (int j = i + 1; j < cinStr.length(); j++) {
                            if (cinStr.charAt(j) == cinStr.charAt(j - 1) + 1) {
                                chr2[++index] = cinStr.charAt(j);
                                i = j + 1;
                                length2 = index;
                            } else {
                                i = j - 1;
                                break;
                            }
                        }
                    }
                }
            }
            if (length1 == length2) {
                if (chr1[length1] >= chr2[length1]) {
                    System.out.println(chr1);
                } else {
                    System.out.println(chr2);
                }
            } else if (length1 > length2) {
                System.out.println(chr1);
            } else if (length1 < length2) {
                System.out.println(chr2);
            }
        }
    }
}
发表于 2023-08-08 20:30:45 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String ret = "";
        String max = "";
        int len = str.length();
        int i = 0;
        for(; i < len; i++){
            char ch = str.charAt(i);
            if(ch >= '0' && ch <= '9'){
                ret = ret + ch + "";
            }else{
                if(ret.length() > max.length()){
                    max = ret;
                }else{
                    ret = "";
                }
            }
            
        }
        //处理最后一个字符串是数字的情况,如果是数字则循环进不来
        
        if(i == len && ret.length() > max.length()){
            max = ret;
        }
        System.out.println(max);
    }
}

发表于 2022-03-26 11:13:13 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
   
       String cur = "";
       String ret = "";
        int i = 0;
        for( ;i < str.length();i++){
            char ch = str.charAt(i);
            if(ch >= '0' && ch <= '9'){              
                cur = cur + ch +"";
            }else{
               if(cur.length() > ret.length()){
                    ret = cur;               
                }else{
                   cur = "";
               }
            }
        }
        if(i == str.length() && cur.length() > ret.length()){
            ret = cur;
        }
       System.out.println( ret);
    }
}

发表于 2022-03-25 09:27:05 回复(0)
public static void main(String[] args) {
		ArrayList <StringBuffer>strlsit = new ArrayList<>();
		String stri ="abcd12345ed125ss123456789";
		StringBuffer str = new StringBuffer();
		int size=0,max=0;
		for(int i=0;i<stri.length();i++) {
			if(stri.charAt(i)>='0'&&stri.charAt(i)<='9') {
				str.append(stri.charAt(i));
				size++;
			}else {
				str = new StringBuffer();
				size=0;
				}
		}
			max=size>max?size:max;
			strlsit.add(str);
		
		for(StringBuffer s:strlsit) {
			if(s.length()==max) {
				System.out.println(s);
			}
		}

发表于 2020-07-28 20:31:26 回复(0)
import java.util.Scanner;

public class Main {

	//获取最长的连续数字串
	public static String maxDigitalStr(String str){
		char[] arrayChar = str.toCharArray();//将str转换成字符数组
		int maxDigiStrLen = 0;//最长连续数字串的长度
		String maxDigiStr = "";//最长连续数字串
		int tempStrLen = 0;//临时数字串长度
		StringBuffer tempStr = new StringBuffer();//临时数字串
		for(int i = 0; i < arrayChar.length; i++){
			//过滤掉非数字的字符
			if(arrayChar[i] >= '0' && arrayChar[i] <= '9'){
				tempStr.append(arrayChar[i]);
				tempStrLen++;
				if(tempStrLen > maxDigiStrLen){
					maxDigiStrLen = tempStrLen;//更新 最长连续数字串长度
					maxDigiStr = tempStr.toString();//更新 最长连续数字串
				}
			}else{
				tempStrLen = 0;//临时数字串长度 置0
				tempStr.setLength(0);//临时数字串 清空
			}
		}
		return maxDigiStr;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String tempStr = sc.next();
		System.out.println(maxDigitalStr(tempStr));
	}

}

编辑于 2020-07-22 22:55:48 回复(0)
//换个思路,用正则相关的API
public static void way(String str){
    Pattern pattern = Pattern.compile("[0-9]+");
    Matcher matcher = pattern.matcher(str);
    String maxsub="0"; //随便给的值,为了不报空指向异常  
    while (matcher.find()){
        String group = matcher.group();
        if(maxsub.length()<group.length()){
            maxsub=group;
        }
    }
    System.out.println(maxsub);
}


发表于 2020-05-13 22:42:33 回复(0)
Java实现,已通过。
(我爬了,是我理解错题了,只要是连续的数字串就可以,不是说要数字本身是连续的,但是按照这个思路居然稀里糊涂地过了是怎么回事。 无语。)
思路一:
找连续最长的数字串,数字嘛,也就从0到9,那最长的数字串无非是“123456789”,先查字符串里有无此序列,再缩成"12345678",看字符串里有无此序列...... 如果缩到字符串长度为0了还没有,返回空串即可。代码如下:
import java.util.*;

public class Main {

    public static String theLongestNum(String str) {
        String numStr="123456789";
        while (numStr.length()!=0) {
            if (str.contains(numStr))
                return numStr;
            else numStr=numStr.substring(0,numStr.length()-1);
        }
    return "";
    }

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println(theLongestNum(in.nextLine()));
    }
}

思路二:
需要一个记录数字串长度的length,再来个存最大值的max,如果遇到非数字,就把length重新置为0,如果遇到数字,就需要length++,并比较这时的length是否大于max,大于的话需要替换掉max,并且将下标end跟上,赋i值,最后输出subStr(max-end+1,end+1)   (因为长度是max)即可。代码如下:
import java.util.*;


public class Main {


  
   public static String theLongestNum(String str) {
    int max=0;
        int length=0;
        int end=0;//用于指示数字串最末
        char[] strToChar=str.toCharArray();
    for(int i=0;i<strToChar.length;i++)
    {
        //遇到数字
        if(str.charAt(i)>='0'&&str.charAt(i)<='9')
        {
            length++;
            if(length>max)
            {max=length;
            //换max值时end下标需要跟过来
                end=i;
            }
        }
        //不是数字,需要length重新赋为0
        else
        {length=0;}
    }
    //有max个数。
        return str.substring(end-max+1,end+1);

    }


    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println(theLongestNum(in.nextLine()));
    }
}


编辑于 2020-01-19 18:42:46 回复(0)
//输出字符串中连续最长的数字串
#include <cctype>
#include <string>
#include <iostream>
using namespace std;

int main()
{
    int maxLength = 0;
    string s;
    cin>>s;
    int len = s.size();
    if(len==0)
    {cout<<""<<endl;return 0;}
    int lenNow = 0;
    string str = "";
    string result;
    for(int j=0;j<len;j++)
    {
       if(isdigit(s[j]))
       {
           str+=s[j];
           lenNow = str.length();
           if(lenNow>maxLength)
           {
               maxLength = lenNow;
               result = str;
           }
       }
        else
        {
            str="";
        }
    } 
    cout<<result<<endl;
}


发表于 2019-08-21 13:14:45 回复(0)
public class Main {
    public static void main(String[] args){
        //思路:两层循环:找到起点,然后计算长度,从原字符串中截取
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        char[] arr = str.toCharArray();
        int count = 0;
        String result = "";
        for(int i = 0;i<arr.length;++i){
            if(arr[i]>='0'&&arr[i]<='9'){  //当前的是数字
                int index = i;
                count = 1;    //初始化计数器        
            for(int j = i+1;j<arr.length;++j){
                if(arr[j]>='0'&&arr[j]<='9'){
                    count++;
                    index = j;
                }else{
                    break;
                }
            }
            if(count>result.length()){
                result = str.substring(i,index+1);
            }
        }else{
            continue;
        }
    }
        System.out.println(result);
}
}
发表于 2019-08-14 17:52:31 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String[] a = sc.nextLine().trim().split("[\\D]+");
            String tmp = a[0];
            for(int i = 0;i<a.length;i++){
                if(tmp.length()<a[i].length()){
                    tmp = a[i];
                }
            }
           System.out.println(tmp); 
        }
        sc.close();
    }
   
}
发表于 2019-03-25 22:37:39 回复(0)
/*
使用两个字符串,字符串sb记录当前数字串及长度,strTemp记录下一个数字串及长度,如
果strTemp长度比sb长,则替换sb,即sb=strTemp,最后输出sb
*/
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            StringBuilder sb = new StringBuilder("");
            StringBuilder strTemp = new StringBuilder();
            char[] ch = sc.nextLine().toCharArray();
            for(int i=1;i<ch.length;i++){
                if(ch[i]>='0' && ch[i]<='9'){
                    strTemp.append(ch[i]);
                }
                if(ch[i]<'0' || ch[i] >'9' || i == ch.length-1){
                    if(strTemp.length()>sb.length()){
                        sb = strTemp;
                    }
                    strTemp = new StringBuilder("");
                }
            }
            System.out.println(sb);
        }
    }
}

发表于 2018-10-09 11:16:50 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String[] str = in.nextLine().split("[a-zA-Z\\s+]{1,}");
        String maxLengthStr = str[0];
        for(int i=1;i<str.length;i++){
            if(str[i].length()>maxLengthStr.length()){
                maxLengthStr = str[i];
            }
        }
        System.out.println(maxLengthStr);
    }
}

发表于 2018-10-05 21:36:25 回复(0)
public class Main {

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        String str = scan.next();
        get(str);
    }
    private static void get(String str) {
        String sd="";
        String st="";
        int f=-2;
        int max=0;
        
        char[] arr = str.toCharArray();
        if (arr[0]>='0'&&arr[0]<='9') {
            max = 1;
        }
        for (int i = 1; i < str.length(); i++) {
            if (arr[i]>='0'&&arr[i]<='9') {
                if (arr[i]==arr[i-1]+1) {
                    st+=arr[i];
                }else {
                    if(max<st.length()){
                        max=st.length();
                        sd=st;
                    }
                    st=arr[i]+"";
                }
                
            }
            else {
                if(max<st.length()){
                    max=st.length();
                    sd=st;
                }
                st="";
                
            }
            f=arr[i];
        }
        if(max<st.length()){
            sd=st;
            //max=st.length();
        }
        System.out.println(sd);
    }
    
}

发表于 2018-10-01 19:30:54 回复(0)
正则表达式果然是字符串问题的***
String[] arr = str.split("[\\D]+");\\分割数字
String[] arr = str.split("\\b");\\按单词边界分割,之前单词倒叙输出做过

发表于 2018-09-04 16:49:53 回复(0)
具体思想就是遍历去找数字,这个时间是标准O(n)的,关键在i=j这句, 遍历过的不用再遍历一次,因为比之前短的就不可能成为答案。往末尾加“a“是懒得边界判断了,加“a”很方便。
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine().trim()+"a";
        char []strs = line.toCharArray();
        int tmpl = 0;
        int tmpi = 0;
        for(int i = 0; i< strs.length; i++){
            if(Character.isDigit(strs[i])){
                for(int j =i+1; j< strs.length; j++){
                    if (!Character.isDigit(strs[j])) {
                        if(j-i>tmpl){
                            tmpl = j-i;
                            tmpi = i;
                        }
                        i = j;
                        break;
                    }
                }
            }
        }
        System.out.println(line.substring(tmpi, tmpi+tmpl));
    }
}

发表于 2018-09-01 15:35:58 回复(0)

用正则,空间换时间
import java.util.*;

public class NowCoder {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String first = in.nextLine();
        String str[] = first.split("[^0-9]+");
        int n =0;
        int max = 0;
        for (int i = 0; i < str.length; i++) {
            if (str[i].length()>n){
            n=str[i].length();
            max=i;
           }
        }
        System.out.println(str[max]);
    }
}

编辑于 2018-08-28 21:28:12 回复(0)
//计算出最长顺序数字串的长度,再根据结束的尾标和长度输出字符串
public class test02 {
    public static void main(String[] args) {
        //读入一个字符串str,输出字符串str中的连续最长的数字串
        Scanner input=new Scanner(System.in);
        String str=input.nextLine().trim();
        char[] a=str.toCharArray();
        int count=0;
        int max=0;
        int j=0;
        StringBuilder str1=new StringBuilder();
        for (int i = 0; i < a.length; i++) {
            int v=(int)a[i];
            if(v>=48&&v<=57){
                count++;
                if(count>max){
                    max=count;
                    j=i;
                }
            }else{
                count=0;
            }    
        }
        for (int i = j; i > j-max; i--) {
            str1.append(a[i]);
        }
        str1.reverse();
        System.out.println(str1);
    }
}

发表于 2018-08-19 15:19:33 回复(0)
import java.util.Scanner;

public class HeChangTuan {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        String str = cin.nextLine();
        char[] arr = str.toCharArray();
        int begin = 0, end = begin + 1;
        //记住下标
        int start=begin,fin=end;
        int max = 0, dis = 0;
        while (end < arr.length && begin < end) {
            int i = begin;
            while (((int) arr[end] - (int) arr[i] == 1)&&(i<arr.length-1)&&(end<arr.length)) {
                end++;
                i++;
                //末尾可能溢出
                if(end==arr.length-1){
                    if((int) arr[end] - (int) arr[i] == 1){
                        end=arr.length;
                        break;
                    }
                }
            }
            
            
            
            end=end-1;
            dis = end - begin+1;
            max = Math.max(dis, max);
            //记住下标
            if(max==dis){
                start=begin;
                fin=end;
            }
            begin = end+1;
            end = begin + 1;

        }
        System.out.println(str.substring(start,fin+1));
    }
}

编辑于 2018-05-30 15:57:00 回复(0)