已解决
KMP算法使用
来自网友在路上 166866提问 提问时间:2023-09-28 14:34:06阅读次数: 66
最佳答案 问答题库668位专家为你答疑解惑
class Solution {public int strStr(String haystack, String needle) {if (haystack == null || needle == null || needle.length() < 1 || haystack.length() < needle.length()) {return -1;}int[] next=getNext(needle.toCharArray());int i=0; //指向匹配数组的指针 int j=0;//指向被匹配数组的指针int res=-1;while(i<haystack.length()&&j<needle.length()){//如果两个字符相等if(haystack.charAt(i)==needle.charAt(j)){i++;j++;}else if(j>0){//如果还能往左跳j=next[j];}else{//如果到了next数组0位置则说明没有可以匹配的位置了i++;}//子串已经到达最后了,代表父串中已经出现了一次//i和j其实最后都进行了额外的一次++操作}return j == needle.length()? i -j: -1;}public static int[] getNext(char[] str) {if (str.length == 1) {return new int[]{-1};}int[] next = new int[str.length];next[0] = -1;next[1] = 0;// i: next数组的位置int i = 2;// j: 要和next[i-1]比较的位置,最长的可能的公共前缀的位置int j = 0;while (i < next.length) {if (str[i - 1] == str[j]) {next[i++] = ++j;//如j匹配上了则对于此刻i的最大前缀长度加一同时跳到下一个i位置} else if (j > 0) {// 当前跳到j位置的字符,和i-1位置的字符配不上,则j继续向前跳,直到跳到最开始0位置,或者匹配上j = next[j];} else {//j跳到头也没匹配上,i++到下一个位置next[i++] = 0;}}return next;}}
查看全文
99%的人还看了
相似问题
- vsto word 获取目录起始页和结束页,如目录起始位置为2、结束位置为3,返回2和3
- IP地理位置定位技术:保护网络安全的新利器
- WSL2安装ubuntu及修改安装位置,设置Ubuntu开机启动链接ssh服务
- ROS navigation栅格地图原点位置如何确定?
- 35. 搜索插入位置 --力扣 --JAVA
- 【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘
- 76基于matlab的免疫算法求解配送中心选址问题,根据配送地址确定最佳配送中心地址位置。
- 小程序判断是否授权位置信息和手动授权
- 计算机毕业设计 基于SpringBoot的车辆网位置信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
- 基于DOTween插件实现金币飞行到指定位置功能
猜你感兴趣
版权申明
本文"KMP算法使用":http://eshow365.cn/6-15237-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!