2024.6.14刷题记录-KMP记录

2024-06-15 15:36
文章标签 记录 2024.6 14 刷题 kmp

本文主要是介绍2024.6.14刷题记录-KMP记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、831. KMP字符串 - AcWing题库

1.普通版KMP

2.代码简洁版KMP


一、831. KMP字符串 - AcWing题库

1.普通版KMP

学习记录(http://t.csdnimg.cn/JxPv5)。解题代码如下:

# KMP算法
# 创建next数组
def build_next(patt):i = 1n = len(patt)prefix_len = 0next = [0] * nwhile i < n:if patt[prefix_len] == patt[i]:# 匹配成功,继续匹配后面的prefix_len += 1next[i] = prefix_leni += 1else:# 匹配失败if prefix_len == 0:# 匹配下一个# next.append(0)i += 1else:# 跳转prefix_len = next[prefix_len - 1]return nextpatt_len = int(input())
patt = input()
string_len = int(input())
string = input()
next = build_next(patt)# kmp搜索
i = 0
j = 0
ans = []
while i < string_len:if string[i] == patt[j]:i += 1j += 1elif j > 0:# 跳转j = next[j - 1]else:# 一点不匹配i += 1if j == patt_len:# 找到子串ans.append(i - j)j = next[j - 1]     # 注意这里是跳转for x in ans:print(x, end = ' ')

2.代码简洁版KMP

来自题解(AcWing 831. KMP字符串 - AcWing)。通过在字符串前面加一空格,减少j==0这一判断条件。

# 代码更简洁版KMP
if __name__ == '__main__':patt_len = int(input())patt = ' ' + input()    # 使下标从1开始string_len = int(input())string = ' ' + input()next = [0] * (patt_len + 1)# next数组j = 0   # 匹配下标for i in range(2, patt_len + 1):    # 类似主串下标while j and patt[i] != patt[j + 1]:# 跳转j = next[j]if patt[i] == patt[j + 1]:# 匹配成功,匹配下标加一j += 1next[i] = j# 字符串匹配j = 0for i in range(1, string_len + 1):while j and string[i] != patt[j + 1]:j = next[j]if string[i] == patt[j + 1]:j += 1if j == patt_len:print(i - j, end = ' ') # i+1-j-1 = i-jj = next[j]

感谢你看到这里!一起加油吧!

这篇关于2024.6.14刷题记录-KMP记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063861

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

记录AS混淆代码模板

开启混淆得先在build.gradle文件中把 minifyEnabled false改成true,以及shrinkResources true//去除无用的resource文件 这些是写在proguard-rules.pro文件内的 指定代码的压缩级别 -optimizationpasses 5 包明不混合大小写 -dontusemixedcaseclassnames 不去忽略非公共

数控系统资料记录

数控技术:数控系统刀补功能的软件实现及其仿真--数控仿真程序开发实战 https://github.com/mai4567/CNC 下载编译报错:error: src/dxflib.a: 没有那个文件或目录: 解决:下载dxflibhttps://www.ribbonsoft.com/en/dxflib-downloads,下载完后编译,编译后得到libdxflib.a,替换掉项目makefi

pixel_link记录

export PYTHONPATH=/path2to/pixel_link/pylib/src:$PYTHONPATH   https://blog.csdn.net/northeastsqure/article/details/83655200   https://blog.csdn.net/u011440558/article/details/78606662   报错: All

nginx问题记录以及解决方法

问题描述: 打开多个nginx.exe 结果在任务管理器中不能结束该进程 解决办法: 以管理员的身份运行cmd 1、查看所有nginx.exe 进程 tasklist /fi "imagename eq nginx.exe" 2、结束这些进程 taskkill /fi "imagename eq nginx.exe" /f 问题描述: 配置前端项目路径然后就直接看本地项目路径的属

spring mvc完整项目创建步骤记录

快速创建一个spring mvc项目(只有页面调用→到controller→到页面) 1、首先创建Dynamic Web Project 2、创建jsp页面index.jsp以及成功(/WEB-INF/view/success.jsp)和失败页面(/WEB-INF/view/error.jsp) index.jsp <%@ page language="java" contentType=

JAVA特殊问题记录

1、时间方面   关于YYYY与yyyy的以及HH与hh的区别 public class Test {public static void main(String[] args) throws Exception{String time = "2019-12-29 13:16";SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd hh: