经典中的经典之字符串

前言:前段时间发烧了,所以耽误了很多事情,一直没有更新,多穿点衣服,感冒不好受。

接下来有时间就会陆续更新一些基础的算法题,题目都很经典,大家可以先尝试着做,再看

解析。

第一题:

392f380ff293499889efc6ec0c065828.png03698de334e84bb9960690587ea240c1.png

思路:先来审题,对于这种题目很长的题更应该耐着性子来读,把大意读懂,接着一步步模拟,明确优先顺序,那一步做什么判断,做之前可以先写一下思路,再来上手实操。

这道题看起来抽象,其实确实抽象,一般的人做不出,除非你是二班的人,我改代码都改了有两个小时。首先你应该判断你输入的字符串是否展开,不展开的话又分两种,一种是右边字符是左边的后继,,那么删除减号输出;第二种,如果右边比左边ascII小,那么保留减号直接输出。如果展开的话,先判断是正序还是逆序,同时你又要判断是否;'-'两边的字符是否都是数字还是都是字母,是的话才能继续展开,否则不展开。然后展开的话循环的左边界就是左字符加一,到右边界-1,同时右边界取不到,接着又要更具p2输出循环输出字符的次数,在循环内部根据p1的取值输出大小写,这里我定义了一个字符串,将字符填进字符串,方便后续的逆序输出。最后这里面还有很多细节,大家可以思考,比方说数组越界,逆序输出等等..

2fc769dc02c74d52b3b9e8d3157ffab5.png

第二题:

7357de01192746fbb7651f3896dd4e20.png

思路:注意到要输出的是单词,我们可以定义三个数组,分别是作为中间变量的,最长和最短字符串,如果中间变量大于最长就更新长度和单词。接着就是具体,可以用ch=getchar(),如果读到\n或者eof退出,碰到分隔符来判断,没碰到就把这个字符填进去中间变量字符串

31c78105380249e3a85423143409f306.png

第三题:

cd173ffa1a474103844657dc2d2b67b4.png思路:就是对着葫芦画瓢。要判断新的字符串,你就得先定义两个新的字符串,然后在给定的边界中遍历,将它添加进新的字符串,然后来比较即可

ba84c33648884a6dbd2d0d225c4022ce.png第四题:

9a15ee2f73aa453ab8b6d3e2bc84c952.png思路:这个题看起来简单,其实也要好好想一想。这里你可以这么想先定义个数组cnt[26]来计数等下出现字符串的时候减去’a'表示字母所在的位置,循环遍历字符串的时候,出现一次就计数一次,然后重新遍历数组,再判断输出

7a042112822c4ed18d2020fa46cb7161.png

第五题:

c433bdb55af14462a72db797055bbdce.png

思路:依葫芦画瓢。注意判断一下,最后一个字符是加上第一个字符,然后输出即可

5ab96541daf24d55aa63935d02459bf3.png

第六题:

39e13c3e8931470e8ea674dcce81305d.png

思路:

题意很简单,就是把数字字符的个数统计一下,然后输出个数和字符,那么肯定要定义计数器cnt

然后判断相邻两个字符是不是相同,相同cnt++不相同就输出,值得注意的是,要判断相邻两个,那么就要从1开始遍历,从0的话就越界了。最后还要再输出一遍,原因就是如果最后几个是相同的数字字符,循环里面就不会把他输出,举个例子最后几个数字是222,他的cnt一直加到3,就退出循环了,所以最后再输出一次。

第七题:

e2037f358fd94557bae1182901a387b2.png

思路:既然要统计键盘总次数,就要根据你输入的字符串的每一个字母来确定,所以你得将输入按动一次,二次,三次,四次出现的字符存入一个数组,并把字符作为下标因为你遍历的字符串是字母,把数值当作数组的值,最后就和即可。

ef4765d893c84842b8979a7bf0341371.png第八题:

29d95ad01e654a4aac256b1781955ea4.png

思路:这个题看起来很抽象,但是题意很好懂,就是先定义二维数组,接着输出,如果是地雷输出*不是地雷判断这个位置的八个方位有多少个地雷加起来,输出。这里介绍两种方法,一种就是用方向数组来优化代码,另外一种就是用常规if判断

efb9798f354e46a0bbb0f9d5e9273d8c.png在这里面,d[x]表示横行移动d[y]表示纵向移动,例如当d[1+dx[0]][1+[dy[0]]就表示d[2][0],就是向左移动一格判断。如果用八个if来判断的话就是,把else里面的语句更改为

942ed99004fc448b812480b8395bcca2.png

第九题:

b112d03519c54acab686814c105f654c.png

思路:这个题很简单,因为字符串有空格,所以用getline,然后稍微判断一下即可

第十题:

61056ed2a9f741efb8fbb78c90994192.png

思路:这个题没什么说的,字符串中有空格,所以读取的时候用getline,然后分别统计即可

ed23600241a74ec9a78d43a529f4e912.png

第十一题:

c732ebcaba2547a3a89d06654548752f.png思路:

需要找vk,同时,你能更改一个字母,那么你可以这样,先找到所以出现的vk然后将他更改为其他的字符,计数器++,方便下一次改字符的时候计数,然后你就要找vv或者vk,要考虑全面找到vv的话改后一个v,找到kk 的话改第一个k,找到就break;最后输出即可。

68283dfb06064847a6c61ff132bbcffa.png

第十二题:

3451d40877a64d87bed53519ea5a645c.png

思路:

这个题的题意其实有点抽象,不太好理解,我整这道题也整了好久。

注意他问的是字符串中有多少个boy和girl包括被覆盖的,先从这个输入输出来看,为什么boy是4,因为,一个眼睛可见的boy,还有一个o,说明什么?说明o左右两边的b 和y都被覆盖了,后面的yy同理。想到这里,你肯定还是懵。你就要统计次数了,那么统计什么呢,比方说出现一个b那么你计数器是不是要++,出现o计数器++,出现y,计数器也++,但是里面必然会有重复的,比方说你先是统计b,出现b就计数器++的话,包括boy,bo,出现o包括bo,oy,是不是发现bo重复统计了,y也是同理,所以为了避免重复,你只需在当出现o的时候加一个条件,就是不能出现b,同理出现y的时候不能出现b和o,再来计数,这样就避免了重复。

8474c7d9a24c4a12ac339d0c40f0da7d.png第十三题:

1b2470cee8364ad682a747913903d60a.png思路:

题目看似抽象,实则确实抽象。要理解题意。具体来做的话好像的就是打表格。

把所有的英文数字单词计入一个数组,所对应数字的平方%11的值,再放到一个数组,如何循环六次,每一次输入一个单词,判断是不是数字单词,是的话就把对应数字平方%11的值赋给一个新的数组,存起来。最后排序一下输出。并且如果排完之后的数字不是第一位的话,如果数值比10小前面的0,不能省略,所以,这里还要用if判断一下,再来输出。

f2e7581cf3c142c99425bbd76ca8c259.png

总共13题,到此结束,感谢你的阅读,与君共勉!

  • 0
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 62
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值