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

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

http://www.nowcoder.com/practice/2c81f88ecd5a4cc395b5308a99afbbec

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main(){
    string s;
    while(cin>>s){
        int i=0;
        int maxn=0;
        vector<int> left;
        left.clear();
        while(i<s.size()){
            if(isdigit(s[i])==true){
                int j=i+1;
                while(isdigit(s[j])==true){
                    j++;
                }
                if((j-i)==maxn){
                    left.push_back(i);
                }
                if((j-i)>maxn){
                    maxn=j-i;
                    left.clear();
                    left.push_back(i);
                }
                i=j+1;
            }
            else{
                i++;
            }
        }
        for(int k=0;k<left.size();k++){
            for(int p=0;p<maxn;p++){
                cout<<s[left[k]+p];
            }
            
        }
        cout<<','<<maxn<<endl;  
        
    }
    return 0;
}

参考前排大佬的解答完成了代码,思路是: 1.定义一个容器left来保存每个最长数字串的左端数字的下标; 2.定义一个指针i从字符串左端开始移动,再定义最长数字串长度初始化为maxn=0; 3.判断当前字符是否数字,是的话执行4操作,否的话继续右移动; 4.定义另一个指针j=i+1,如果j指向的字符还是数字的话,j继续移动,否则进入5; 5.当前j指向位置的字符是非数字,同时从指针i开始到j左侧都是数字,即为当前最长子串,对其长度j-i进行判断:(1)当长度等于maxn时将指针i的值加入容器left中;(2)当长度大于maxn时更新maxn,清空容器left,再将指针i的值存入容器,并进入6。 6.当前指针j左侧的最长数子串已经记录,并且当前字符为非数字字符,因此将指针i移动到i=j+1,若为超过右端,跳回3判断。 7.通过前六个步骤已经找到了最大数字串的长度和左端,然后遍历容器元素,依次输出从每个元素开始的maxn个元素,然后输出逗号和maxn。 8.由于题目说到可能输入多组数据,因此要用while(cin>>s)来判断输入,并在每个字符串的所有输出完成后输出换行符。

全部评论

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务