首页 > 试题广场 >

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

[编程题]在字符串中找出连续最长的数字串
  • 热度指数:148292 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定的由数字和小写字母混合构成的字符串 s,找到其中最长的数字子串。如果由多个相同长度的数字子串,则需要全部输出,具体输出的格式请参考输出描述。

\hspace{15pt}子串为从原字符串中,连续的选择一段字符(可以全选、可以不选)得到的新字符串。

输入描述:
\hspace{15pt}输入一个长度为 1 \leqq {\rm len}(s) \leqq 200、由数字和小写字母混合构成的字符串 s。保证至少存在一个数字子串。


输出描述:
\hspace{15pt}记最长的数字子串长度为 l,有 m 个长度为 l 的数字子串。在一行上先首尾相连的输出 m 个长度为 l 的数字子串(不使用空格分割),随后输出一个逗号,再输出 l
示例1

输入

abcd12345ed125ss123058789

输出

123058789,9
示例2

输入

11a22b33c

输出

112233,2

说明

\hspace{15pt}在这个样例中,数字子串 \texttt{ 长度均为 2,都是最长的数字子串。

备注:
\hspace{15pt}本题数据已规范为单组询问(2025/01/15)。

双指针

s = input()
n, arr, mm = len(s), [], 0
i, j = 0, 0

while j < n:
    if s[j].isdigit():
        while j < n and s[j].isdigit():
            j += 1
        mm = max(j-i, mm)
        arr.append(s[i:j])
    i, j = j + 1, j + 1

newArr = [i for i in arr if len(i) == mm]
print(f"{''.join(newArr)},{mm}")

正则表达式

import re
s = input()
arr = re.findall(r'\d+', s)
maxLen = max(len(x) for x in arr)

newArr = [c for c in arr if len(c) == maxLen]
print(f"{''.join(newArr)},{maxLen}")
发表于 2025-06-21 10:42:26 回复(0)
import re

s = input().strip()
# 提取所有数字子串
digits_list = re.findall(r'\d+', s)

if not digits_list:  # 没有数字的情况
    print("0")
else:
    # 计算最长数字子串长度
    max_len = max(len(num) for num in digits_list)
    # 筛选所有最长数字子串
    max_nums = [num for num in digits_list if len(num) == max_len]
    
    # 按出现顺序拼接结果
    result = ''.join(max_nums)
    print(f"{result},{max_len}")
发表于 2025-05-02 21:27:49 回复(0)
while True:
    try:
        s = input().strip()
        for ch in s:
            if ch.isalpha():
                s = s.replace(ch,' ')
        num = list(map(str,s.strip().split()))
        res = []
        n = len(num)
        ans = ''
        for i in range(n):       
            res.append(len(num[i]))
        m = max(res)
        for i in range(n):
            if len(num[i]) == m:
                ans  += num[i]                     
        print(ans,m,sep=',')
    except:
        break

发表于 2025-04-14 19:57:40 回复(0)
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)