找出字符串中的连续最长数字子串。我们可以采取双指针的方式:

1.定义i指针,用来遍历数组,当i位置是数字字符时,我们就需要判断后面是否也为数字字符,所以定义另一个指针j,用j来获取从i开始的数字字符的长度。

2.当j停止时,此时我们就需要判断这次从i开始,长度为j-i的子串是否长于上一次?如果是,则更新,起始位置和长度,否则不更新。

3.如果j走了,此时i就可以直接从j开始扫描,没必要从i+1开始了。如果j没走,则扫描i+1位置。(j是否走动,取决于i位置是否为数字字符,即进入第一个if内)

时间复杂度:O(n)

空间复杂度:O(1)

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    cin >> str;

    int begin = 0, len = 0, n = str.size();
    int i = 0;
    while (i < n)
    {
        if (isdigit(str[i]))
        {
            int j = i;
            while (j < n && isdigit(str[j])) j++;
            if (j - i > len)
            {
                begin = i;
                len = j - i;
            }
            i = j;
        }
        else i++;
    }

    cout << str.substr(begin, len) << endl;

    return 0;
}