鱼C论坛

 找回密码
 立即注册
查看: 1091|回复: 3

[已解决]代码看不太懂

[复制链接]
发表于 2021-1-28 23:05:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在第七行代码中each1作为目标字符串的索引值为什么each1的取值只是从0到length-1,为什么不是整个目标字符串的长度?
还有range(length-1)它的取值是从0到length-2,这种查找子字符串在目标字符串中出现多少次的题目不是要搜索完整个目标字符串吗?
最佳答案
2021-1-28 23:28:24
本帖最后由 Daniel_Zhang 于 2021-1-28 23:31 编辑

很简单的道理啊

只需要对照到字符串倒数第二个字符就够了

例如一个长字符串

str1 = 'abcdef'

子字符串 str2 = 'ac'

一共有六位对吧(length = 6),倒数第二位是 'e' 然后编号(角标)是 4 也就是 length - 2

此时 'abcdef'
              'ac'

'e' 和 'a' 对照,不相同,就得后移

'abcdef'
        'ac'

因为你的子字符串是两位,如果对照到倒数第二个字符,依旧没有相同,就不需要再对照了,因为此时只剩下最后一位了,一位无论如何都不会和两位相同

但是,一定要写成 range(length - 1) 因为如果你不 -1 的话,后面会继续对照,也就是 'f' 和子字符串的第一位对照了以后,'f' 后面就没了,但是又需要对照,就会出现 out of range 的错误
QQ截图20210128225833.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-28 23:28:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Daniel_Zhang 于 2021-1-28 23:31 编辑

很简单的道理啊

只需要对照到字符串倒数第二个字符就够了

例如一个长字符串

str1 = 'abcdef'

子字符串 str2 = 'ac'

一共有六位对吧(length = 6),倒数第二位是 'e' 然后编号(角标)是 4 也就是 length - 2

此时 'abcdef'
              'ac'

'e' 和 'a' 对照,不相同,就得后移

'abcdef'
        'ac'

因为你的子字符串是两位,如果对照到倒数第二个字符,依旧没有相同,就不需要再对照了,因为此时只剩下最后一位了,一位无论如何都不会和两位相同

但是,一定要写成 range(length - 1) 因为如果你不 -1 的话,后面会继续对照,也就是 'f' 和子字符串的第一位对照了以后,'f' 后面就没了,但是又需要对照,就会出现 out of range 的错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 01:04:51 From FishC Mobile | 显示全部楼层
还是蛮好理解的嘛。length-1是因为后边还有each+1,如果不减去一个到最后岂不是越界报错了?不过写代码多少感觉还是有些歧义的,比如要在thank you sooo much中找oo,应该是1个还是2个?这个代码的话就是2个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-29 05:32:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 03:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表