HJ92 在字符串中找出连续最长的数字串
题目来源 牛客网 HJ92
描述
输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)
本题含有多组样例输入。
数据范围:字符串长度 1 \le n \le 200 \1≤n≤200 , 保证每组输入都至少含有一个数字
输入描述:
输入一个字符串。1<=len(字符串)<=200
输出描述:
输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)
1 | 输入: |
题解代码
这道题的思路很简答,从前往后遍历一遍,遇到字符串就开始计算count
,并记录起始位置。最后再把起始位置和子串长度插入一个pair
里面。
需要注意的是,这里必须要用pair
,因为题目要求中提到了,如果有多个相同长度的数字串,就需要一并输出,并加上最后位的,长度
1 |
|
做这道题的起因-另外一道题
咳咳,在学校上课的时候遇到了另外一道题目,这道题目只需输出一个最长数字子串就可以了,不需要关心长度相同的问题。
我的思路和HJ92一样,就是遍历找到数字子串的长度和起始位置,然后插入一个新的string再cout进行输出。其中s和ret_s
这两个变量都是string
然后我就遇到了“奇葩情况”
我还在本地测试了两次,发现“应该”
是不会多打印空格什么的
上图Linux G++,下图VS2019
而我通过了上面的HJ92
那道题,说明代码的思路是完全没有问题的,问题就出在输出这里
在结束之后(这道题限时,我没能解决这个问题)我才发现自己是个大笨蛋!
解决方法1:加斜杠0
注意,加endl
的方法我已经试过了,也不行
其实在这里,我是有想过加\0
的,但是我-加-错-位-置
了!!!应该给ret_S
加,哼哼啊啊啊啊
解决方法2:直接for打印
这个方法我也没想到,既然我都已经知道起始位置和子串长度了,为啥不直接打印原本string里面的内容呢?直接for打印一下不就行了???
只能说自己对容器的使用还不是很熟悉,知识没学到位啊,哭
把自己挂在这里告诫后来者
- 本文标题:【牛客网】HJ92 在字符串中找出连续最长的数字串
- 创建时间:2022-09-07 10:51:28
- 本文链接:posts/3879460729/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!