首页 > 编程知识 正文

牛客网华为机试,牛客网华为机试作弊

时间:2023-05-04 10:24:20 阅读:229821 作者:2872

作者:jmdzsSteven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)

本题含有多组样例输入。

输入描述:

输入一个字符串。1<=len(字符串)<=200

输出描述:

输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。

示例:

输入:

abcd12345ed125ss123058789a8a72a6a5yy98y65ee1r2

输出:

123058789,9729865,2

说明:

样例一最长的数字子串为123058789,长度为9样例二最长的数字子串有72,98,65,长度都为2 解题思路:

这题是字符串分析题。首先,遍历寻找连续数字的子串,若出现非数字,则分析前方的数字子串是否更长,若更长,则清除当前result容器内容,并放入该子串;若数字子串同最长的一样长,则往容器中继续放入,这样就可以存放同样最长的多个子串;遍历完成后考虑到字符串结尾可能有一个数字子串,所以也进行一次判断;最后,将容器的string连接起来,并返回最大长度即可。

测试代码: #include <iostream>#include <string>#include <vector>using namespace std;string find(string str,int &maxnum){ vector<string> result; string maxstr,temp; int num=0; int size=str.size(); // 遍历寻找子串 for(int i=0;i<size;++i) { if(str[i]>='0'&&str[i]<='9') { temp+=str[i]; num++; } else{ // 若出现更长的子串,则清空容器 if(num>maxnum) { maxnum=num; result.clear(); result.push_back(temp); } // 若出现同最大长度一致的子串,放入容器 else if(num==maxnum) { result.push_back(temp); } temp.clear(); num=0; } } // 针对末尾数字子串的情况,进行补充 if(num>maxnum) { maxnum=num; result.clear(); result.push_back(temp); } else if(num==maxnum) { result.push_back(temp); } // 遍历容器生成最终数字子串 for(auto s:result) { maxstr+=s; } return maxstr;}int main(){ string str; while(getline(cin,str)) { int maxnum=0; cout<<find(str,maxnum)<<","<<maxnum<<endl; } return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。