《LeetCode力扣练习》代码随想录——字符串(实现 strStr()—Java)
刷题思路来源于 代码随想录
28. 找出字符串中第一个匹配项的下标
-
KMP算法
class Solution { public int strStr(String haystack, String needle) { if(needle.length()==0){ return 0; } if(haystack.length()<needle.length()){ return -1; } int[] next=new int[needle.length()]; char[] target=needle.toCharArray(); getNext(next,target); int j=0; for(int i=0;i<haystack.length();i++){ while(haystack.charAt(i)!=target[j]){ j=next[j]; if(j==-1){ j=0; break; } } if(haystack.charAt(i)==target[j]){ j++; } if(j==target.length){ return i-target.length+1; } } return -1; } private void getNext(int[] next,char[] chs){ next[0]=-1; if(next.length==1){ return; } next[1]=0; int j=1; int i=j+1; int k=0; int n=chs.length; while(i<n){ if(k==-1||chs[i-1]==chs[k]){ next[i]=k+1; k++; i++; }else{ k=next[k]; } } } }