题解 | #在字符串中找出连续最长的数字串#
在字符串中找出连续最长的数字串
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中即可。
查看3道真题和解析