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

知识点字符串模拟

描述

对于给定的由数字和小写字母混合构成的字符串 s,找到其中最长的数字++子串++ 。如果由多个相同长度的数字子串,则需要全部输出,具体输出的格式请参考输出描述。

++子串++为从原字符串中,连续的选择一段字符(可以全选、可以不选)得到的新字符串。

输入描述:

输入一个长度为 1≦len(s)≦200、由数字和小写字母混合构成的字符串 s。保证至少存在一个数字子串。

输出描述:

记最长的数字子串长度为 l,有 m 个长度为 l 的数字子串。在一行上先首尾相连的输出 m 个长度为 l 的数字子串(不使用空格分割),随后输出一个逗号,再输出 l。

示例1

输入:

复制代码
abcd12345ed125ss123058789

输出:

复制代码
123058789,9

示例2

输入:

复制代码
11a22b33c

输出:

复制代码
112233,2

说明:

复制代码
在这个样例中,数字子串 "11","22","33" 长度均为 2,都是最长的数字子串。

备注:

复制代码
本题数据已规范为单组询问(2025/01/15)。
cpp 复制代码
#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main()
{
    string s;
    while (cin>>s)
    {
        int i=0;
        int maxm = 0;
        //记录最长数字子串的起始位置
        vector<int> index;
        while (i<s.size())
        {
            if ('0'<=s[i] && s[i]<='9')
            {
                int j = i + 1;
                //找到一个连续的数字子串
                while ('0'<=s[j] && s[j]<='9') j++;
                //如果和当前最大长度相等,则记录子串的第一个字符
                if ((j-i)==maxm)
                {
                    index.push_back(i);
                }
                //如果大于当前最大长度,则更新
                if ((j-i)>maxm)
                {
                    maxm = j - i;
                    index.clear();
                    index.push_back(i);
                }
                i = j + 1;
            }
            else i++;
        }
        for (int h=0;h<index.size();h++)
        {
            for (int k=0;k<maxm;k++) cout<<s[index[h]+k];
        }
        cout<<','<<maxm<<endl;
    }
    return 0;
}
相关推荐
艾莉丝努力练剑1 小时前
【Linux:文件】进程间通信
linux·运维·服务器·c语言·网络·c++·人工智能
梦游钓鱼1 小时前
C++指针深度解析:核心概念与工业级实践
开发语言·c++
小雨中_1 小时前
3.1 RLHF:基于人类反馈的强化学习
人工智能·python·深度学习·算法·动态规划
relis1 小时前
从 dma-buf 到 tensor parallel:跨越领域的零拷贝模式
算法
一条大祥脚2 小时前
Manacher/马拉车算法
算法
phoenix@Capricornus2 小时前
初等数学中点到直线的距离
人工智能·算法·机器学习
田里的水稻2 小时前
FA_规划和控制(PC)-快速探索随机树(RRT)
人工智能·算法·数学建模·机器人·自动驾驶
jaysee-sjc2 小时前
十三、Java入门进阶:异常、泛型、集合与 Stream 流
java·开发语言·算法
元亓亓亓3 小时前
LeetCode热题100--41. 缺失的第一个正数--困难
数据结构·算法·leetcode