鱼C论坛

 找回密码
 立即注册
查看: 2776|回复: 8

[已解决]我这代码还能抢救一下吗?

[复制链接]
发表于 2022-10-9 21:05:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jcpython2 于 2022-10-9 21:21 编辑

题目要求已经在另一个帖子解决了,但是自己写的代码有问题不知道问题所在,比较纠结

代码求的是b在a中出现了什么位置
a,b= 'aaabbbbbabcab','ab'
j = 0
total = []
k = 0
while j < len(a):
    if a.find(b,k) != -1:
        total.append(a.find(b,k))
        k = k + a.find(b,k) +1
    j += 1     
print(total)


理论上'ab'出现了三次,但最后只输出了但最后只输出 [2, 8]
最佳答案
2022-10-9 21:22:18
a,b= 'aaabbbbbabcab','ab'
j = 0
total = []
k = 0
for j in range(len(a)):
    if a.find(b,k,14) != -1:
        total.append(a.find(b,k,14))
        k = a.find(b,k,14) + len(b)   # 问题出在此句
    j += 1     
print(total)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-9 21:22:18 | 显示全部楼层    本楼为最佳答案   
a,b= 'aaabbbbbabcab','ab'
j = 0
total = []
k = 0
for j in range(len(a)):
    if a.find(b,k,14) != -1:
        total.append(a.find(b,k,14))
        k = a.find(b,k,14) + len(b)   # 问题出在此句
    j += 1     
print(total)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-9 21:23:55 | 显示全部楼层
a,b= 'aaabbbbbabcab','ab'
j = 0
total = []
k = 0
while j < len(a):
    k = k + a.find(b,k)
    if a.find(b,k) != -1:
        total.append(a.find(b,k))
        # k = k + a.find(b,k) +1
    j += 1     
print(total)

问题已经解决,用直觉把错误的第9行挪到第6行即可

但我依然不知道具体错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-9 21:24:41 | 显示全部楼层

我刚试出来就看到你也发了,我在3楼比你迟了十来秒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-9 21:26:48 | 显示全部楼层
本帖最后由 阿奇_o 于 2022-10-9 21:28 编辑

要不换个思路:
a,b= 'aaabbbbbabcab','ab'
for i in range(len(a)):
    if a[i:i+len(b)] == b:
        print(i, a[i:i+len(b)])

        
2 ab
8 ab
11 ab

评分

参与人数 1鱼币 +1 收起 理由
jcpython2 + 1 蜜雪冰城

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-9 21:27:07 | 显示全部楼层

我审题错误了,我一直纠结一个问题,字符串会重叠,我必须+1+1来走让他每个字符串检索,但其实题目我细心看了两百次,发现原来他强调不会重叠字符串,也就是bbbb如果找bb的话只算两次,而我一开始的思路是会找3次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-9 21:37:05 | 显示全部楼层
jcpython2 发表于 2022-10-9 21:27
我审题错误了,我一直纠结一个问题,字符串会重叠,我必须+1+1来走让他每个字符串检索,但其实题目我细心 ...

k = a . find(b , k , 14) + len(b)
        + len(b) 的目的,就是为了跳过才找到的整个子串,避免在查找这种叠字子串的时候发生误判。

评分

参与人数 1鱼币 +1 收起 理由
jcpython2 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-9 21:40:21 | 显示全部楼层

这思路也是棒棒的,帮助也很大,奖个鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-9 21:56:36 | 显示全部楼层
jackz007 发表于 2022-10-9 21:37
+ len(b) 的目的,就是为了跳过才找到的整个子串,避免在查找这种叠字子串的时候发生误判。

感谢各位,已经彻底弄懂错处

原代码的 k +是多余的,因为k需要重置指针,不需要叠加前K的值,每一次a.find(b,k) 已经有新值,以目标字符串len(b)迭代即可

k = k + a.find(b,k) +1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 23:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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