美团笔试练题1----在字符串中找出连续最长的数字串

1、题目描述

2、算法分析

最直观的思路是把数字字符串全都提取出来,然后取出最大的字符串,但这样有些麻烦,引入更大的空间复杂度;

另一个思想,我们想到了函数string.substring(a,b),通过下标a,b把子字符串提取出来,那么本题要求最大的数字子字符串,我们可以维护一个数字字符串的最大长度和该子字符串结束的下标,然后通过substring()函数返回该字符串中的最大数字子字符串。

3、代码(ACM模式---自己构建输入输出)

import java.io.*;
import java.util.*;
class test  
{
	public static void main (String[] args) throws java.lang.Exception
	
	{
	    //处理IO
	    Scanner sc = new Scanner(System.in);
	    String s = sc.nextLine();//输入原始字符串
	    
	    //算法部分
	    int max =0;//维护一个最大数字字符串长度
	    int end =0;//维护该最大数字字符串的结尾下标
	    int count=0;//记录遍历过程中 当前数字字符串的长度
	    
	    for(int i=0;i<s.length();i++){
	        if('0'<= s.charAt(i)&&s.charAt(i)<='9'){
	            count++;
	            if(count>max){
	                max=count;
	                end =i;
	            }
	        }else{
	            count=0;
	        }
	    }
	    
	    //因为substring方法截取的区间是前闭后开的,所以end+1
	    String maxnum=s.substring(end-max+1,end+1);
	    
		System.out.println(maxnum);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值