首页 > 试题广场 >

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

[编程题]在字符串中找出连续最长的数字串
  • 热度指数:138087 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)
本题含有多组样例输入。

数据范围:字符串长度 , 保证每组输入都至少含有一个数字

输入描述:

输入一个字符串。1<=len(字符串)<=200



输出描述:

输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。

示例1

输入

abcd12345ed125ss123058789
a8a72a6a5yy98y65ee1r2

输出

123058789,9
729865,2

说明

样例一最长的数字子串为123058789,长度为9
样例二最长的数字子串有72,98,65,长度都为2    
while True:
    try:
        length = 0
        s = input().strip()
        res = []
        start = 0
        #数字串起始位置的循环,第一次从0开始
        #由于条件为真才能进入while循环,所以+1使得条件为真
        #以便于第一次循环能够正常开始
        while start+1:
            #从起始位置开始往后判断字符是否为数字
            for j in range(start,len(s)):
                #是数字继续判断下一个
                if s[j].isdigit():
                    continue
                #不是数字
                else:
                    #j-start > length判断当前数字串是否是已知的最大长度
                    if j-start > length:
                        length = j-start
                        #如果比已有的数字串长度都大,则需要将数字串的列表清空
                        res.clear()
                        #再将最大的放进列表中
                        res.append(s[start:j])
                    elif j-start == length:
                        #如果和已有的最大长度一样大,直接放进列表中
                        res.append(s[start:j])
                    #更新起始位置,当前判断索引j位置已经是非数字了
                    #直接从j的下一个开始判断
                    start = j+1
                    break
            #此处是判断若for循环结束是因为走到了最后一个元素需要特殊处理
            #走到最后一个元素
            if j == len(s)-1:
                if s[j].isdigit():
                    #最后一个元素是数字,需要处理
                    #这里+1,是因为j已经是最后一个索引值,在前面的for循环中不会再往下加一个
                    if j+1-start > length:
                        length = j+1-start
                        res.clear()
                        res.append(s[start:j+1])
                    elif j+1-start == length:
                        length = j+1-start
                        res.append(s[start:j+1])
                    #已经判断完了字符串的所有字符,直接退出while循环
                    break
                else:
                    #最后一个元素不是数字,不用处理,已经判断完了字符串的所有字符,直接退出while循环
                    break
        print("".join(res) + "," + str(length))
    except:
        break

发表于 2022-05-01 19:47:00 回复(0)
while True:
    try:
        str1 = input()#记录string
        for i in range (len(str1)): 
            if str1[i].isdigit() == False:#根据长度把不是数字的都换成空格
                str1=str1.replace(str1[i]," ")
        str1=str1.split()#以空格区分元素
        a=[]
        for i in range (len(str1)): # 也可用max.
            a.append(len(str1[i]))#记录每个元素长度
        b=list(map(int,a))#转换为int
        b.sort(reverse=True) #从大到小排序
        str2 = ""
        for i in range (len(str1)):
            if len(str1[i]) == b[0]:#读取最大长度,当为最大长度串时记录最大长度串的数据。
                str2 = str2 + (str1[i])
        output = str2 +','+str(b[0])#以逗号隔开并最后显示最大长度
        print(output)
    except:
        break

发表于 2021-07-01 00:03:27 回复(0)
while True:
    try:
        nums = []
        st = input()
        #找出数字子串nums
        #方便统计,字符串末尾加空格
        st = st + ' '
        sn = ''
        for i in range(len(st)):
            if st[i].isdigit():
                sn = sn + str(st[i])
                if not st[i+1].isdigit():
                    nums.append(sn)
                    sn = ''
        #找出数字子串最大长度
        mx = 0
        for i in nums:
            if len(i) > mx:
                mx = len(i)
        #找出最长数字子串,如果有多个则字符串相加
        sk=''
        for i in nums:
            if len(i) == mx:
                sk=sk+i
        print('%s,%s' %(sk,mx))
    except:
        break
发表于 2021-06-01 11:46:42 回复(0)
while True:
    try:
        a = input()
        e = ''
        for i in range(len(a)):
            if a[i].isalpha():
                a = a.replace(a[i], '.')
        b = a.split('.')
        c = max(len(i) for i in b)
        for i in b:
            if len(i) == c:
                e += i
        print(e+','+str(c))
    except:
        break
上面的比较麻烦,自己写了一个,大致就是把所有不是数字的都换掉,然后再把数字拿出来
发表于 2021-05-30 17:34:47 回复(0)

while True:
try:
m=input()
list1=[]
list2=[]
v=''
for i in range(len(m)+1):
for j in range(len(m)+1):
if 0<=i<j<=len(m)+1:
list1.append(m[i:j])
for i in list1:
if i.isdigit()==True:
list2.append(i) #得到所有的数字字符串

    res=max(list2,key=len,default='') #找到所有的字符串最长的
    for j in list2:
        if len(str(j))==len(str(res)):
            v+=str(j)

    print(v+','+str(len(res)))
                # if m[i:j].isdigit()==True:
                #     list1.append(i)
except:
    break
发表于 2021-04-13 14:48:14 回复(0)
class Solution:
    def notnum (str):
        not_num = 0
        i = 0
        for i in range(0, len(str)):
            if str[i].isalpha() == True:
                not_num = 1
        return not_num

    def max_len_num(a):
        left = 0
        right = 0
        nums = []
        while left <= len(a):
            while right <= len(a):
                if Solution.notnum(a[left:right]) == 0:
                    nums.append(a[left:right])
                right += 1
            left += 1
            right = 0
        max_len = len(max(nums, key=len))
        max_nums = []
        for num in nums:
            if len(num) == max_len:
                max_nums.append(num)
        return max_nums

while True:
    try:
        max_nums = Solution.max_len_num(input())
        for num in max_nums:
            print(num, end='')
        print(',', end='')
        print(len(max_nums[0]))
    except EOFError:
        break

发表于 2021-03-25 12:28:50 回复(0)
while True:
    try:
        str1=input()
        n=0
        m=0
        x=-1
        str2=''
        for each in str1:
            x+=1
            if each.isnumeric():
                n+=1
                if n>m:
                    m=n
                    str2=str1[x-n+1:x+1]
                elif n==m:
                    str2+=str1[x-n+1:x+1]
                else:
                    continue
            else:
                n=0
                
        print('%s,%d'%(str2,m))
    except:
        break
发表于 2021-03-18 11:17:22 回复(0)
while True:
    try:
        s=input()
        lenth=0
        a=[]
        for i in range(len(s)):
            for j in range(i+1,len(s)+1):
                if s[i:j].isdigit() and j-i>=lenth:
                    if j-i==lenth:
                        a.append(s[i:j])
                    else:
                        a=[]
                        a.append(s[i:j])
                        lenth=j-i
        print(''.join(a),len(a[0]),sep=',')
    except:
        break
发表于 2021-03-08 18:14:13 回复(0)
思路
  1. 使用正则匹配输入的字符串中的数字返回列表
  2. 降序排序
  3. 第一个元素的长度即最大长度
  4. 将列表中和最大长度相等的元素组成字符串
  5. 输出得到的字符串 和最大长度

发表于 2021-02-27 21:34:17 回复(0)
while True:
    try:
        max_len, cur_len, longest = 0, 0, ""
        s = input()
        for i in range(len(s)):
            if s[i].isdigit():
                cur_len += 1
                if cur_len == max_len:
                    longest += s[i+1-cur_len:i+1]
                elif cur_len > max_len:
                    max_len = cur_len
                    longest = s[i+1-cur_len:i+1]
            else:
                cur_len = 0
        print("{},{}".format(longest, max_len))
    except:
        break

发表于 2020-12-18 22:04:33 回复(0)
# 思路:将不是数字的字符全部变成‘a’,再将字符串用a来分割称数组,
#      长度最大的数组的长度即为所求的长度

while True:
    try:
        s = input().strip()
        new_s = ''
        for ch in s:
            if not ch.isdigit():
                new_s += 'a'
            else:
                new_s += ch
        digit_list = list(filter(lambda s: s.isdigit(), new_s.split('a')))
        max_len = max(map(len, digit_list))
        max_len_digit = []
        for digit in digit_list:
            if len(digit) == max_len:
                max_len_digit.append(digit)
        res_str = ''.join(max_len_digit)
        print(res_str+','+str(max_len))
    except:
        break

发表于 2020-12-09 16:44:18 回复(0)
python使用re解决此问题的方法
import re
while 1:
    try:
        a=input()
        b= re.findall('\d+', a)
        c=[]
        for i in b:
            if len(i)==max(len(j) for j in b):
                c.append(i)
        print(''.join(c),end=',')
        print(len(i))
    except:
        break

发表于 2020-11-20 11:48:54 回复(0)
正则表达式 python3
import re
while True:
    try:
        stringlist=re.findall(r'[0-9]+', input()) #找到所有数字块
        arrlen=list(map(len, stringlist))  #所有数字块长度
        res=[] # 最长的数字块挑出来
        for k,i in enumerate(arrlen):
            if i==max(arrlen):
                res.append(stringlist[k])
        print("".join(res)+','+str(max(arrlen))) #合并输出
    except:
        break


发表于 2020-11-20 01:54:12 回复(0)
import re
while True:
    try:
        s = input().strip()
        digit_str = re.findall(r'\d+', s)
        print(digit_str)
        max_len, res = 0, ''
        for i in digit_str:
            tmp_len = len(i)
            if tmp_len > max_len:
                max_len = tmp_len
                res = i
            elif tmp_len == max_len:
                res += i
        print('{},{}'.format(res, max_len))
    except:
        break
        

发表于 2020-10-02 19:54:22 回复(0)
import re
while 1:
    try:
        a = input()
        res = ""
        li = re.split(r"\D+", a)
        result = ""
        le = sorted([len(i) for i in li])[-1]
        for i in li:
            if len(i) == le:
                result += i
        print(result.strip()+","+ str(le))
    except:
        break
发表于 2020-08-31 16:53:33 回复(0)
while True:
    try:
        import re
        strs=input().strip()
        for i in strs:
            if not i.isnumeric():
                strs=strs.replace(i,'a')
        res1=re.sub(r'a+','b',strs)
        nlist=list(res1.split('b'))
        outlist=sorted(nlist,key=lambda i:len(i),reverse=True)
        maxnum=int(len(outlist[0]))
        out=''
        for i in nlist:
            if len(i)==maxnum:
                out+=i
        out=out+','+str(maxnum)
        print(out)
    except:
        break


发表于 2020-08-12 21:51:07 回复(0)

问题信息

难度:
46条回答 69483浏览

热门推荐

通过挑战的用户

查看代码