题解 | 字符串中找出连续最长的数字串

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

https://www.nowcoder.com/practice/bd891093881d4ddf9e56e7cc8416562d

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() 
{
    string str;
    cin >> str;
    
    int left = 0, right = 0;
    int max_len = 0;
    // 记录最长数字串的起始索引和长度
    int start = 0, result_len = 0;

    while(right < str.size())
    {
        // 如果当前字母不是数字, 重置左边界
        if(!isdigit(str[right])) left = right + 1;
        // 当前窗口长度
        int current_len = right - left + 1;
        // 更新最长数字串
        if(current_len > result_len)
        {
            result_len = current_len;
            start = left; // 记录起始位置
        }
        right++;
    }
    cout << str.substr(start, result_len) << endl;
    return 0;
}

这道题的核心思路是 用滑动窗口(双指针)遍历字符串,动态维护连续数字子串的区间,同时记录最长数字子串的起始位置和长度,具体分以下几步:

  1. 滑动窗口初始化:用 leftright 两个指针表示当前窗口的左右边界,初始都指向字符串起始位置。
  2. 遍历与窗口调整: 右指针 right 逐个字符遍历字符串。若遇到非数字字符,就把左指针 left 直接跳到 right + 1(让窗口重新从下一个位置开始找连续数字)。若遇到数字字符,窗口自然向右扩展(right 继续右移,left 保持不动)。
  3. 记录最长子串:每次窗口变化后(right 移动),计算当前窗口长度 right - left + 1。若当前长度大于历史最长长度,就更新 “最长长度” 和 “最长子串的起始位置”。
  4. 截取并输出结果:遍历结束后,用 substr(起始位置, 最长长度) 截取字符串,输出最长连续数字子串。
全部评论

相关推荐

点赞 评论 收藏
分享
在等offer的火锅...:我去履历这么好,都找不到工作吗?
点赞 评论 收藏
分享
07-22 11:12
门头沟学院 Java
不是,我就随手投的怎么还真发面试啊
皮格吉:大厂特别快的——来自已经被共享中
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务