华为机试HJ92:在字符串中找出连续最长的数字串
Posted 翟天保Steven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试HJ92:在字符串中找出连续最长的数字串相关的知识,希望对你有一定的参考价值。
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
题目描述:
输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)
本题含有多组样例输入。
输入描述:
输入一个字符串。1<=len(字符串)<=200
输出描述:
输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。
示例:
输入:
abcd12345ed125ss123058789 a8a72a6a5yy98y65ee1r2
输出:
123058789,9 729865,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;
}
以上是关于华为机试HJ92:在字符串中找出连续最长的数字串的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试 - 最长连续子串(Python)| 真题+思路+考点+代码+岗位