题解 | #在字符串中找出连续最长的数字串#

在字符串中找出连续最长的数字串

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中即可。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务