好未来2017秋招笔试(连续最长的数字串)

连续最长数字串


1、题目要求

 

读入一个字符串str,输出字符串str中的连续最长的数字串

 

1.1 输入例子

abcd12345ed125ss123456789

1.2 输出结果

123456789


 

2、程序分析

 

  • 遍历字符串
  • 遇到数字时,开始进行数字串的记录,因此需要一个变量来标识是不是进入到了数字串的记录状态中
  • 最容易出错的是循环结束时,对最后一个字符的检查,如果最后一个字符是数字,那么就会影响到数字串记录状态的结束

 

3、示例代码

 

#coding=utf-8
'''
读入一个字符串str,输出字符串str中的连续最长的数字串
'''

string = 'abcd12345ed125ss123456789oik'
def get_long_number(string):
    b_start = False         #标识是否遇到了数字串
    start_index = -1        #数字串开始的位置
    sub_len = 0             #数字串的长度
    tmp_len = 0

    for index,item in enumerate(string):
        if item.isdigit():
            if not b_start:
                b_start =True
                start_index = index
                tmp_len = 1
            else:
                tmp_len += 1
        else:
            b_start = False
            if tmp_len > sub_len:
                sub_len = tmp_len

    # 这里是最容易出错的地方,如果最后一个字符还是数字,那么b_start = False
    # 就不会执行,循环结束时,sub_len没有更新
    if b_start:
        if tmp_len > sub_len:
            sub_len = tmp_len


    return string[start_index:start_index+sub_len]

print get_long_number(string)