题解 | #在字符串中找出连续最长的数字串#
在字符串中找出连续最长的数字串
https://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; //找出字符串s中最长的数字子串及其长度 int main() { string s; while (cin >> s) { string num("0123456789"); string t[100];//存放所有连续数字串 vector<int> len;//存放数字串的长度 int k = 0; for (auto it = s.begin(); it != s.end(); ++it) { //从头开始遍历 if (find(num.begin(), num.end(), *it) != num.end()) { //*it在num中,也即*it是数字 t[k].push_back(*it);//将*it放进t[k]中(初始时k为0) auto jt = it; for (jt = it + 1; jt != s.end(); ++jt) { //继续从it+1开始遍历 if (find(num.begin(), num.end(), *jt) != num.end()) { t[k].push_back(*jt);//如果*jt是数字则继续放进t[k]中 } else { //如果*jt不是数字,则将t[k]当前的长度放进len中,并结束本次循环 len.push_back(t[k].size()); break; } } if (jt == s.end()) { //如果已经遍历到了s的尾部,就无须继续遍历 len.push_back(t[k].size()); break; } else { //否则,将it置为jt,该*jt不是数字,结合++it,也就是从jt+1继续遍历 it = jt; ++k; } } } int maxlen_numstring = *len.begin(); for (auto tt = len.begin(); tt != len.end(); ++tt) { if (maxlen_numstring < *tt) { maxlen_numstring = *tt; } } for (int i = 0; i < len.size(); ++i) { if (len[i] == maxlen_numstring) { cout << t[i]; } } cout << "," << maxlen_numstring << endl; } return 0; }
使用string t[100]存放所有的数字串,使用vector<int> len存放所有的数字串的长度。
用两个迭代器完成遍历:it从字符串s的头部开始遍历,遇到数字时将其放进t[k]中(k初始为0),然后jt从it+1继续遍历并放进t[k]中,直到*jt不为数字,此时将t[k].size放进len中即可。