题解 | #在字符串中找出连续最长的数字串#
在字符串中找出连续最长的数字串
https://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec
#include <bits/stdc++.h> using namespace std; int main() { string s; while (cin >> s) { // 注意 while 处理多个 case size_t pos = 0; int count = 1; int maxlen = 0; vector<string> res; for(int i = 0; i < s.size(); ++i){ if(isdigit(s[i])){ pos = i; break; } } int i = pos + 1; for(; i < s.size(); ++i){ if(isdigit(s[i]) && isdigit(s[i - 1])){ ++count; } else if(!isdigit(s[i]) && isdigit(s[i - 1])){ if(count > maxlen){ maxlen = count; res.clear(); res.emplace_back(s.substr(pos, i - pos)); } else if(count == maxlen){ res.emplace_back(s.substr(pos, i - pos)); } //查找下一个数字起始位置 pos = s.find_first_of("0123456789", i); if(pos == std::string::npos){ count = 0; //后面没有数字了 break; } i = pos; //i应该变为 pos + 1,加一的工作交给 ++i去做了,否则会错误 count = 1; } } if(count > maxlen){ res.clear(); res.emplace_back(s.substr(pos, i - pos)); } else if(count == maxlen){ res.emplace_back(s.substr(pos, i - pos)); } for(string &str : res){ cout << str; } cout << "," << res[0].length() << endl; } } // 64 位输出请用 printf("%lld")