LeetCode--28.找出字符串中第一个匹配项的下标(字符串/KMP算法)
28.找出字符串中第一个匹配项的下标题目描述给你两个字符串haystack和needle请你在haystack字符串中找出needle字符串的第一个匹配项的下标下标从 0 开始。如果needle不是haystack的一部分则返回-1。示例 1输入haystack sadbutsad, needle sad 输出0 解释sad 在下标 0 和 6 处匹配。 第一个匹配项的下标是 0 所以返回 0 。示例 2输入haystack leetcode, needle leeto 输出-1 解释leeto 没有在 leetcode 中出现所以返回 -1 。提示1 haystack.length, needle.length 104haystack和needle仅由小写英文字符组成解题思路利用KMP算法其核心步骤为1、根据模式串T求出next数组2、利用next数组进行匹配主字符串指针不回溯求next数组步骤代码classSolution{publicvoidgetNext(Strings,int[]next){// 初始化intj-1;next[0]j;for(inti1;is.length();i){// 最长前缀和最长后缀不匹配// 这里只关注第i个字符左侧字符串不包含i的前后缀while(j0s.charAt(i-1)!s.charAt(j)){// 回退jnext[j];}// 匹配成功默认j-1为通配符均匹配成功j;next[i]j;}}publicintstrStr(Stringhaystack,Stringneedle){// 初始化next数组int[]nextnewint[needle.length()];getNext(needle,next);// 初始化i,jinti0;intj0;while(ihaystack.length()jneedle.length()){if(haystack.charAt(i)needle.charAt(j)){i;j;}else{// 若不匹配i不变通过next[j]找已匹配的子串while(j0haystack.charAt(i)!needle.charAt(j)){// 回退jnext[j];}i;j;}}if(jneedle.length())returni-j;return-1;}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2510432.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!