jcpython2 发表于 2022-10-9 21:05:44

我这代码还能抢救一下吗?

本帖最后由 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'出现了三次,但最后只输出了但最后只输出

jackz007 发表于 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)

jcpython2 发表于 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行即可

但我依然不知道具体错误{:10_264:}

jcpython2 发表于 2022-10-9 21:24:41

jackz007 发表于 2022-10-9 21:22


我刚试出来就看到你也发了,我在3楼比你迟了十来秒

阿奇_o 发表于 2022-10-9 21:26:48

本帖最后由 阿奇_o 于 2022-10-9 21:28 编辑

要不换个思路:

a,b= 'aaabbbbbabcab','ab'
for i in range(len(a)):
    if a == b:
      print(i, a)

      
2 ab
8 ab
11 ab

jcpython2 发表于 2022-10-9 21:27:07

jackz007 发表于 2022-10-9 21:22


我审题错误了,我一直纠结一个问题,字符串会重叠,我必须+1+1来走让他每个字符串检索,但其实题目我细心看了两百次,发现原来他强调不会重叠字符串,也就是bbbb如果找bb的话只算两次,而我一开始的思路是会找3次

jackz007 发表于 2022-10-9 21:37:05

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

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

jcpython2 发表于 2022-10-9 21:40:21

阿奇_o 发表于 2022-10-9 21:26
要不换个思路:

这思路也是棒棒的,帮助也很大,奖个鱼币

jcpython2 发表于 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
页: [1]
查看完整版本: 我这代码还能抢救一下吗?