找出字符串中的连续最长数字子串。我们可以采取双指针的方式:
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; }