请问一下关于以下题我写的代码哪里出错了??请指正,非常感谢!
2条回答 默认 最新
关注 【以下回答由 GPT 生成】
你的代码逻辑上没有问题,但是在
computeLps
函数中,你没有处理正确的边界情况。在该函数中,i
从1开始,但你没有处理lps[0]
的情况。另外,在kmp
函数的最后,你没有返回任何值。我为你修改了代码并提供了改正建议,如下所示:def kmp(pattern, text): n = len(pattern) m = len(text) lps = [0] * n i, j = 0, 0 computeLps(pattern, n, lps) while i < m: if pattern[j] == text[i]: i += 1 j += 1 if j == n: print("Pattern found at index", i - j) j = lps[j - 1] elif i < m and pattern[j] != text[i]: if j != 0: j = lps[j - 1] else: i += 1 def computeLps(pattern, n, lps): length = 0 i = 1 while i < n: if pattern[i] == pattern[length]: length += 1 lps[i] = length i += 1 else: if length != 0: length = lps[length - 1] else: lps[i] = 0 i += 1 length = 0 pattern = "ABABDABACDABABCABAB" text = "ABCABCDABABCDABCDABDE" kmp(pattern, text)
修改建议: - 在
computeLps
函数的最后,增加length = 0
的语句,以处理lps[0]
的情况。 - 在kmp
函数中,当找到完整的匹配时,将判断j == n
的语句放在i
和j
的自增语句之后。这样就可以保证代码逻辑的正确性。现在你可以尝试运行代码并检查是否可以正确地输出结果。
【相关推荐】
- 你可以看下这个问题的回答https://ask.csdn.net/questions/7525206
- 这篇博客你也可以参考下:kmp算法原理及代码解释,通俗易懂
- 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 KMP算法思想-动画演示小节, 巩固相关知识点
- 除此之外, 这篇博客: KMP算法真的有这么难吗?(清晰详细版)中的 部分匹配值的作用 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 欧拉系统opt目录空间使用100%
- ¥15 ul做导航栏格式不对怎么改?
- ¥20 用户端如何上传图片到服务器和数据库里
- ¥15 现在研究生在烦开题,看了一些文献,但不知道自己要做什么,求指导。
- ¥30 vivado封装时总是显示缺少一个dcp文件
- ¥100 pxe uefi启动 tinycore
- ¥15 我pycharm运行jupyter时出现Jupyter server process exited with code 1,然后打开cmd显示如下
- ¥15 可否使用carsim-simulink进行四轮独立转向汽车的联合仿真,实现四轮独立转向汽车原地旋转、斜向形式、横移等动作,如果可以的话在carsim中如何进行相应设置
- ¥15 Caché 2016 在Java环境通过jdbc 执行sql报Parameter list mismatch错误,但是同样的sql使用连接工具可以查询出数据
- ¥15 疾病的获得与年龄是否有关