【牛客网】字符串中找出连续最长的数字串
程序员文章站
2024-02-21 14:15:15
...
【牛客网】字符串中找出连续最长的数字串
本题链接
题目描述
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例1
输入
abcd12345ed125ss123456789
输出
123456789
【解题思路】
此题是一道比较典型的找子串问题,题意不难,但是易错。我们需要先用一个字符串保存输入字符串中数字串,在用一个字符串保存数字串中最长的串
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;//输入字符串
string cur;//保存数字串
string ret;//保存最长数字串
cin>>str;
for(int i = 0;i<=str.size();i++)
{
if(str[i]>='0'&&str[i]<='9')
{
cur+=str[i];
}
else{
if(ret.size()<cur.size())
{
ret = cur;
}
else{
cur.clear();//清空cur,放入新的字符串
}
}
}
cout<<ret<<endl;
return 0;
}
易错点:
此题虽然简单,但是很容易错,且错的一脸懵逼(说的就是我,哈哈)
1.for(int i = 0;i<=str.size();i++)
这个等号是不是很碍眼,代码写习惯了,我们进行遍历时,是不加等号的。但并不是所有的循环都如此,比如此题。
当末尾是长数字串时,代码出现问题,为什么?经过调试我才发现,循环最后一次进去,遍历的是字符串的最后一个字符,cur返回的是123456789
但循环经过if直接跳出了,这个值并没有给到ret,所以返回错误。加等号的原因就在这,循环再进入一次,将cur附给ret,则返回正确。
2.
将最长数字串给ret时,这样判断是正确的,但是ret.size()<=cur.size()
还对吗?不对,因为我这样写就错了,哈哈哈。
错误截图:
原因:比如这个测试用例abcd12345ed125ss123456789
循环第一次进入,ret附成12345,但在经过字符时,正确做法,是清空cur,若加上“=”则无法进入到函数cur.clear()
中导致一直无法置空,将所有的数字都赋给了ret,产生错误。
推荐阅读
-
【牛客网】字符串中找出连续最长的数字串
-
字符串中找出连续最长的数字串:读入一个字符串str,输出字符串str中的连续最长的数字串;合法括号的判断:给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)
-
(带思路, 详解) 牛客 HJ59 : 找出字符串中第一个只出现一次的字符
-
《每日一题》字符串中找出连续最长的数字串
-
Java_[字符串中找出连续最长的数字串]读入一个字符串str,输出字符串str中的连续最长的数字串
-
每日一题:字符串中找出连续最长数字串
-
编程题:将一个字符串中连续最长的数字串打印出来
-
请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串
-
[每日一题]48:字符串中找出连续最长的数字串
-
读入一个字符串str,输出字符串str中的连续最长的数字串