一、Description
Implement strStr().
Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
题目大意:
实现一个函数,找出一个字符串中第一次出现给定子串的位置,如果没有返回-1。
Example:
Input: haystack = "hello", needle = "ll" Output: 2
二、Analyzation
该题可通过KMP算法求解,直接贴代码。
三、Accepted code
public static int strStr(String haystack, String needle) {
if(needle == null || needle.length() == 0)
return 0;
if((haystack != null && needle != null) && (haystack.length() < needle.length()))
return -1;
char[] haystackChars = haystack.toCharArray();
char[] needleChars = needle.toCharArray();
int[] next = getNext(needleChars);
return find(haystackChars, needleChars,next);
}
public static int[] getNext(char[] pattern){ //构造next数组
int[] next = new int[pattern.length];
next[0] = 0;
for(int i = 1,j = 0; i < pattern.length;i++){
while(j > 0 && pattern[i] != pattern[j])
j = next[j - 1];
if(pattern[i] == pattern[j]){
j++;
}
next[i] = j;
}
return next;
}
public static int find(char[] origin, char[] pattern,int[] next){ //KMP算法
for(int i = 0,j = 0; i < origin.length;i++){
while(j > 0 && pattern[j] != origin[i])
j = next[j - 1];
if(pattern[j] == origin[i])
j++;
if(j == pattern.length){
return i - pattern.length + 1;
}
}
return -1;
}