首页 > 试题广场 >

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

[编程题]在字符串中找出连续最长的数字串
  • 热度指数:144363 时间限制: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:
        a=input()
        l=['']
        for i in range(len(a)):
            for j in range(i,len(a)):
                if a[i:j+1].isdigit() and len(a[i:j+1])>len(max(l)):
                    l.clear()
                    l.append(a[i:j+1])
                elif a[i:j+1].isdigit() and len(a[i:j+1])==len(max(l)):
                    l.append(a[i:j + 1])
        print(''.join(l),end=',')
        print(len(max(l)))
    except:
        break
发表于 2022-09-04 02:29:20 回复(0)
while True:
    try:
        s = input() + "$" # 在末尾随便加个非数字的字符,防止输入串最后一个数为数字时没有执行else语句的append操作
        li = []  # 存放所有数字子串
        lens = [] # 存放所有数字子串的长度
        ss = ""  # 数字子串初始化为空字符串,遍历输入的字符串,如果为数字则加入
        for i in s:
            if i.isdigit():
                ss += i
            else:
                if len(ss) != 0:
                    li.append(ss)
                    lens.append(len(ss))
                    ss = ""   #加入后将子串重置为空字符串,避免后续加入的串包含前部分
        zz = [] # 存放结果串
        for j in li:
            if len(j) == max(lens):
                zz.append(j)
        print("".join(zz), end=",")
        print(max(lens))            
    except:
        break
发表于 2022-08-25 21:42:23 回复(0)
import re
ls = []
while True:
    try:
        ls.append(input())
    except:
        for s in ls:
            temp = re.findall('\d+',s)
            lenth = max(len(x) for x in temp)
            res = ''
            for i in temp:
                if len(i)==lenth:
                    res += i 
            print(res,lenth,sep=',')
        break  

发表于 2022-08-20 15:12:30 回复(0)
暴力法:
while True:
    try:
        data = input()
        for i in data:
            if not i.isdigit():
                data = data.replace(i,' ')
            else:
                pass
        space = data.split(" ")
#         print(space)
        data_dic = {}
        for j in space:
            if j != '' :
                if j not in data_dic:
                    data_dic[j] = len(j)
                else:
                    pass
            else:
                pass
#         print(data_dic.keys())
        if list(data_dic.values()).count(max(data_dic.values())) == 1:
            maxzifu = ''
            maxint = 0
            for i in list(data_dic.keys()):
                if int(i)>=maxint:
                    maxzifu = i
                    maxint = int(i)
#             print(new_intlist)
            print(maxzifu,end=',')
            print(len(maxzifu))
        else:
            
#             print(list(data_dic.keys()))
            pre_lendic_cell = 0
            for x in list(data_dic.keys()):
                pre_lendic_cell = max(pre_lendic_cell,len(x))
#             print(pre_lendic_cell)
            all_zichuan = []
#             print(len(str(i)))
#             print()
            last_zifu = ''
            for i in data_dic:
                if len(str(i)) == pre_lendic_cell:
                    all_zichuan.append(i)
#             print(data_dic.keys())
            
            for j in all_zichuan:
                last_zifu = last_zifu + str(j)
            print(last_zifu,end=',')
            print(max(data_dic.values()))
#             print(data_dic.values())
    except:
        break

发表于 2022-08-07 11:51:48 回复(0)
Python 动态规划,新建一个vis 数组 标记 是 数字就 +1 找到vis中最大的值遍历vis 如果 如果值最大 回溯对应str 中的字符输出。如下图随便举一个例子
while True:
    try:
        a = input()
        vis = [0]*len(a)
        for i,j in enumerate(a):
            if j.isdigit():
                vis[i] = vis[i-1] + 1
            else:
                vis[i] = 0
        Lmax = max(vis)
        for n,m in enumerate(vis):
            if m == Lmax:
                print(a[n-Lmax+1:n+1],end='')
        print(",{}".format(Lmax))
    except:
        break


发表于 2022-07-18 09:12:10 回复(0)
import re
while True:
    try:
        str1 = input()
        res = re.findall(r'\d+',str1)
        n = 0
        for i in res:
            if len(i) > n:
                n = len(i)
        for i in res:
            if len(i) == n:
                print(i,end='')
        print(f',{n}')
    except:
        break

发表于 2022-07-05 21:09:05 回复(0)
简单
import sys
# 定义函数
def fn(a):
    s = ''
    for i in a:
        if i.isdigit():
            s += i 
        else:
            s += ' '
    s2 = s.split()
    res = []
    for i in s2:
        res.append((i,len(i)))

    res.sort(key=lambda x:x[1],reverse=True)
    res2 = res[0][1]
    res3 = []
    for i in res:
        if i[1] == res2:
            res3.append(i[0])
    print(''.join(res3)+','+str(res2))
            
# 整理数据
s = []
for line in sys.stdin:
    s.append(line.strip())
# 调用函数
for i in s:
    fn(i)
    

发表于 2022-07-01 22:05:56 回复(0)
# coding:utf-8
# Author:donghai
# Date:20220630
# Subject:在字符串中找出连续最长的数字串

while True:
    try:
        string = input()
        new_str = ''
        for i in string:
            if not i.isdigit():
                new_str += "#"
            else:
                new_str += i

        max_len = max(len(i) for i in new_str.split('#'))
        max_str = []
        for i in new_str.split('#'):
            if len(i) >= max_len:
                max_str.append(i)
                print(i,end='')
        print(','+str(max_len))
    except:
        break
发表于 2022-06-30 14:34:47 回复(0)
import re

while True:
    try:
        text = input()
        t = re.findall(r'\d+',text)
        t2 = max([len(i) for i in t])

        for i in t:
            if len(i) == t2:
                print(i,end='')
        print('',end=',')
        print(t2)
    except:
        break
来个正则的
发表于 2022-06-08 02:19:13 回复(0)
import re
while True:
    try:
        s0 = input()
        ss = re.findall(r'\d+', s0)
        ssr = max(ss, key=len)

        ss = [x for x in ss if len(x) == len(ssr) ]
        print(f'{"".join(ss)},{len(ssr)}')
    except:
        break

发表于 2022-06-03 17:25:32 回复(0)
import re
while True:
    try:
        s = input()
        res = re.findall('\d*', s)
        d = dict()
        for ch in res:
            d[ch] = len(ch)
        result_max =max(d.values())
        l=[]
        for ind, val in d.items():
            if val == result_max:
                l.append(ind)
        print(''.join(map(str,l))+ ',' + str(result_max))
        
    except:
        break

发表于 2022-05-24 17:43:04 回复(0)
import re 
while 1:
    try:
        a=input()
        s=re.sub(r'[^0-9]', " ", a)
        s1=s.split()
        s2=sorted(s1,key=lambda x:len(x),reverse=True)
        le=len(s2[0])
        k=''
        for i in s2:
            if len(i)==le:
                k+=i
        print(k+","+str(le))
    except:
              break
发表于 2022-05-20 18:22:01 回复(0)
def fun():
    z = [chr(i) for i in range(48,58)]
    while True:
        try:
            a = input()
        except Exception:
            break
        marker = [0] * len(a)
        for i in range(len(a)-1 , -1, -1):
            if a[i] in z:
                if i == len(a) - 1:
                    marker[i] = 1
                else:
                    marker[i] = max(marker[i]+1, marker[i]+marker[i+1]+1)
        c = max(marker)
        d = ""
        for i in range(len(marker)):
            if marker[i] == c:
                d += str(a[i:i+c])
        print("{},{}".format(d,c))

            
if __name__ == "__main__":
    fun()
发表于 2022-05-19 22:33:04 回复(0)
import re
while 1:
    try:
        ls = []
        ls1 = []
#         ls2 = []
        st = input()
        lenth = len(st)
        s = re.findall(r'[0-9]{1,%d}'%(lenth),st)
        # print(s)
        for i in s:
            ls += [len(i)]
        # print(ls)
        
        maxnum = (sorted(ls)[-1])
        for i in range(len(ls)):
            if ls[i] == maxnum:
                ls1 += [i]
        # print(ls1)
        a = ''
        if len(ls1) == 1:
            a = s[ls1[0]] + ',' + str(maxnum)
            print(a)
#             ls2.append(a)
        else:
            for i in range(len(ls1)):
                a += s[ls1[i]]
            a = a + ',' + str(maxnum)
            print(a)
    except:
        break
发表于 2022-05-12 17:58:39 回复(0)
while True:
    try:
        string = input()
        copy_string = string
        
        for ch in copy_string:
            if not ch.isdigit():
                string = string.replace(ch,' ',1)
                
        nums = [_ for _ in string.split(' ') if _.isdigit()]
        
        max_len = max([len(_) for _ in nums])
        
        output = [_ for _ in nums if len(_) == max_len]
            
        print(''.join(output) + ',' + str(max_len))
    except:
        break
发表于 2022-05-07 16:14:32 回复(0)