数据结构-KMP手算next与nextval(全网最简单,包会)

本文提供两种简便方法,用于手算KMP算法中的next和nextval数组,通过实例详细解析计算过程,帮助读者深入理解并快速掌握KMP算法核心。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手算next值与nextval,全网最简单,时间关系,就不手打了(考完研后又手打了一遍,与图片一致)。

直接把笔记内容图片粘贴了,绝对最简单。有问题的话,下方评论。

方法1:引入了一个maxL,在计算nextval时,比较方便。强烈建议读者按照思路算一遍,再找几道题试试。

方法1

水印处是nextval[3]=nextval[1]=0

考完研了,手敲一遍吧(2018-12-26更新)

KMP手算next与nextval1
序号123456789101112
模式串tababaaababaa
maxL001231123456
next011234223456
nextval010104210104

准备工作:写好模式串t,序号从1开始。

maxL:首个为0,计算包含当前字符的串的最大相同前后缀中字符的个数。例如,对于序号3,aba,有一个相同前后缀。特别地,对序号5,ababa有3个。将计算好的maxL填入,如上表。

next:首个为0,填入前一个maxL的值加1,例如,next[2]=maxL[1]+1=0+1=1。

nextval:首个为0,从左至右,比较maxL与next。

               若不同,填入next的值,例如,对于序号2,maxL[2]=0,next[2]=1,则nextval[2]=1。

               若相同,填入下标为该值的nextval,例如,maxL[3]=next[3]=1。则nextvaL[3]填入下标为1的nextval,即nextval[3]=nextval[1]=0;

方法2:直接计算next与nextval,计算量小一些,在理解方法1的基础上再看。建议两个方法记一个。

方法2

水印处是nextval[3]=nextval[1]=0

考完研了,手敲一遍吧(2018-12-26更新)

                                                                                    KMP手算next与nextval2

序号123456789101112
模式串tababaaababaa
next011234223456
nextval010104210104

根据法一,可知next的前两个必为01(据此可以排除选项),仔细观察可知next与maxL的关系,去除maxL(考试不考),但是nextval就会算的麻烦一点。读者根据自身情况选择法一还是法二。

next:前两个填入01,计算不包括当前字符的串的前后缀相同个数。填入该值加1。例如,序号4前,aba,有一个相同前后缀。填入1+1=2。特别地,没有相同前后缀时填1,例如,序号3前,ab,填入0+1=1;

nextval:首个为0,从左至右,比较该序号字符,与next值对应的字符是否相同。

               若不同,填入next值即可。例如,对于序号2,字符b,next[2]=1。b与序号1对应的字符a不同,则填入next,nextval[2]=next[2]=1。

               若相同,填入next值对应序号的nextval,例如,序号3,next[3]=1,序号3字符a与1对应的字符a相同,则nextval[3]=nextval[1]=0。

如果题目中的next是从-1开始的,算完后,全部-1就好。

更多数据结构与算法实现:数据结构(严蔚敏版)与算法的实现(含全部代码)

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

<think>好的,我现在需要解决用户在使用IntelliJ IDEA时遇到的@Slf4j注解无法生成log变量的问题。根据用户提供的引用内容,问题可能涉及多个方面。首先,我需要回忆Lombok的基本工作原理,它通过注解处理器在编译时生成代码,比如@Slf4j会生成一个log变量。 用户提到已经检查了依赖插件,但问题依然存在。可能的常见原因包括:1)Lombok插件未安装或未启用;2)注解处理器未正确配置;3)项目配置问题,比如JDK版本不兼容;4)缓存或IDE未正确刷新。 根据引用[1],用户确认IDEA配置插件没问题,但编译时报错。引用[2]指出可能是处理器路径的问题,选择第三个选项解决了问题。引用[3]提到注解处理器的问题,可能需要启用处理。因此,我应该按照这些线索逐步排查。 首先,检查Lombok插件是否安装并启用。然后,确保在设置中启用了注解处理器,并正确配置处理器路径。接着,验证项目的JDK版本是否Lombok兼容,可能需要使用JDK8或更高版本。此外,清理缓存并重启IDE也是常见的解决步骤。最后,检查Maven依赖是否正确,可能需要重新导入项目或强制更新依赖。 需要将这些步骤结构化,确保用户能逐步操作,同时引用相关的参考资料来支持解决方案的可靠性。</think>### 解决@Slf4j在IDEA中无法生成log变量的步骤 1. **确认Lombok插件已正确安装并启用** - 打开IDEA,进入 `File → Settings → Plugins`,搜索 **Lombok**,确保插件已安装并勾选启用。若未安装,点击 **Marketplace** 下载后重启IDEA[^2][^3]。 2. **启用注解处理器(关键步骤)** - 进入 `File → Settings → Build, Execution, Deployment → Compiler → Annotation Processors`; - 勾选 **Enable annotation processing**; - 在 **Processor Path** 中选择 **第三项(如引用[2]所述,选择Jar包路径或IDEA默认配置)**,避免动指定路径导致的冲突[^2]。 3. **检查JDK版本兼容性** - Lombok要JDK版本 ≥ 1.8。在IDEA中确认项目JDK设置:`File → Project Structure → Project Settings → Project → SDK`,选择JDK 8或更高版本; - 若使用Maven/Gradle,检查构建工具的JDK配置是否一致[^2]。 4. **清理缓存并重启IDEA** - 执行 `File → Invalidate Caches / Restart... → Invalidate and Restart`,清除编译缓存索引文件。 5. **验证Maven/Gradle依赖配置** - 在 `pom.xml`(Maven)或 `build.gradle`(Gradle)中确保Lombok依赖已正确声明: ```xml <!-- Maven示例 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency> ``` - 执行 `mvn clean install` 或重新导入项目,确保依赖下载完整[^1]。 6. **检查IDEA的编译配置** - 进入 `Settings → Build, Execution, Deployment → Compiler → Java Compiler`; - 确认 **Use compiler** 选项为 **Javac**(非Eclipse或其他)。 --- ### 补充说明 - 若以上步骤无效,尝试动指定Lombok注解处理器路径(需下载对应版本的 `lombok.jar` 文件并配置到Processor Path中)[^2]; - 确保类路径中无旧版本Lombok残留,可通过Maven的 `dependency:tree` 检查依赖冲突。 ---
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值