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;
}
相关推荐
(Charon)3 分钟前
【C++面试】迭代器失效是什么?vector、list、map中如何避免迭代器失效
c++·算法·面试
苏辰澈21 分钟前
C++自己的族谱规则:继承详解下
c语言·开发语言·c++·visualstudio
驭渊的小故事1 小时前
NC229023 题解:二分答案求解“最大化最小值“问题
java·算法
朝朝辞暮i1 小时前
C++ 第 36 课:Action——机械臂/VLA 非常重要
开发语言·c++·算法·ros2
无名猿1 小时前
锁进阶:atomic_flag 自旋锁、shared_mutex 读写锁与无锁的代价
c++·性能优化·并发编程·现代c++
ra90fy1 小时前
B3873 [GESP202309 六级] 小杨买饮料
c++·算法
尘客-追梦1 小时前
qmake / jom / 影子构建:把编译管起来
开发语言·c++·qt
Omics Pro2 小时前
北理工李荣华:AI虚拟细胞证据多模态推理基准
数据库·人工智能·算法·机器学习·自然语言处理
xieliyu.2 小时前
LeetCode 1419 数青蛙:状态模拟求最少青蛙数量|Java 题解
java·算法·leetcode
acd120092 小时前
线上偶发 499 错误,并非后端服务异常
算法