Shu_Ye_ 2023-10-21 10:19 采纳率: 87.5%
浏览 4

kmp算法的有关问题

请问一下关于以下题我写的代码哪里出错了??请指正,非常感谢!

img

img

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-21 12:37
    关注

    【以下回答由 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的语句放在ij的自增语句之后。

    这样就可以保证代码逻辑的正确性。现在你可以尝试运行代码并检查是否可以正确地输出结果。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月21日

悬赏问题

  • ¥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 疾病的获得与年龄是否有关