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

连续最长的数字串


写完才发现,这个题目以前写过,不过看看之前的代码,感觉思路完全不一样了,这一次写的更加简洁

1、题目要求

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

例如输入 abcd12345ed125ss123456789lk

输出结果为123456789


 

2、程序分析

 

这类题呢,其实套路都很简单,唯一要注意的是,如果最后一个字符也是数字的情况

首先,肯定是要遍历字符串,遍历的过程中,遇到数字,我们需要一个变量来保存已经遇到的数字的个数,当遇到一个非数字的字符时,就说明刚刚遇到的数字部分已经结束了,现在,你知道当前位置,又知道刚刚遇到的数字部分的长度,很容易就获得了这一部分数字串

接下来,要和之前记录过的最长数字串比较,如果比之前已经记录的最长数字串还长,就替换掉,继续遍历

如果字符串里最后一个字符是数字呢,这个就要特殊考虑,按照刚才的逻辑,只有遇到非数字字符时才检查是否可以替换原来的最长数字串


 

3、示例代码

 

# coding=utf-8


def get_max_long_number(str_value):
    if not isinstance(str_value, basestring):
        return None
    max_long_number = None
    tmp_len = 0
    for index, item in enumerate(str_value):
        if item.isdigit():
            tmp_len += 1
        else:
            if tmp_len > 0 and (max_long_number is None or tmp_len > len(max_long_number)):
                max_long_number = str_value[index-tmp_len:index]
            tmp_len = 0

    if tmp_len > 0 and tmp_len > len(max_long_number):
        max_long_number = str_value[len(str_value)-tmp_len:len(str_value)]

    return max_long_number


if __name__ == '__main__':
    print get_max_long_number("abcd12345ed125ss123456789")