[每日一题] 5. 字符串中找出连续最长的数字串(字符串、模拟、贪心)
发布日期:2021-05-12 23:13:47 浏览次数:18 分类:精选文章

本文共 1389 字,大约阅读时间需要 4 分钟。

读取字符串中最长的连续数字串

在处理字符串问题时,遇到需要找出最长连续数字串的情况,我们需要找到一种有效且高效的方法。以下是解决这个问题的分步思考过程:

一、问题分析

  • 需要读取一个字符串,并从中找出连续最长的数字串。
  • 连续的定义是指在字符串中,数字字符连续出现的序列。
  • 例如,字符串“abc123456def789”中,最长数字串是“456”和“789”中的“789”。
  • 二、解决思路

  • 初始化两个变量:currentDigits记录当前遇到的连续数字串,maxDigits记录最长的数字串。
  • 遍历字符串中的每个字符:
    • 如果字符是数字,将其添加到currentDigits中。
    • 否则,检查currentDigits是否比maxDigits长,如果是,则更新maxDigits
  • 遍历结束后,由于最后一次可能未遇到非数字字符,所以再次检查currentDigitsmaxDigits
  • 最终,输出maxDigits的值。
  • 三、解决代码

    #include 
    #include
    using namespace std;int main() { string s; cin >> s; string currentDigits; string maxDigits = ""; for (int i = 0; i < s.size(); ++i) { if (isdigit(s[i])) { currentDigits += s[i]; } else { if (currentDigits.size() > maxDigits.size()) { maxDigits = currentDigits; } else { currentDigits.clear(); } } } // 处理循环结束后,currentDigits可能存在更长的数字串 if (currentDigits.size() > maxDigits.size()) { maxDigits = currentDigits; } cout << maxDigits << endl; return 0;}

    四、技术细节

  • 使用isdigit函数判断字符是否为数字。
  • 遍历中每遇到一个数字字符就直接添加到currentDigits,避免了每次都需要进行复杂判断。
  • 遇到非数字字符时,进行比较并更新maxDigits,然后清空currentDigits
  • 遍历结束后再次检查,以确保最后一个数字串是否是最长的。
  • 五、测试用例

  • 输入:"abcd12345ed125ss123456789",输出:"123456789"
  • 输入:"123abcd",输出:"123"
  • 输入:"abc456def789",输出:"789"
  • 输入:"000",输出:"000"
  • 输入:"a0b",输出:"0"
  • 通过这段代码,可以有效地找出任意字符串中最长的连续数字串,处理过程高效且逻辑清晰。

    上一篇:[每日一题] 6. n个数里出现次数大于等于n/2的数(数组、查找)
    下一篇:[C++系列] 49. C++迭代器(STL迭代器)iterator详解

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年05月02日 15时03分48秒