问题描述:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 ifneedle is not part of haystack.
Update (2014-11-02):
The signature of the function had been updated to returnthe index instead of the pointer. If you still see your functionsignature returns a char * or String, please click the reload button toreset your code definition.
问题分析:KMP算法,Java里面字符串要注意判断null以及是否为空字符串;
优化的nextval算法见:http://blog.youkuaiyun.com/woliuyunyicai/article/details/44622573
代码:
public class Solution {
public int strStr(String haystack, String needle) {
if(haystack == null || needle == null)
return -1;
//注意初始化条件
int i = -1;
int j = -1;
int[] next = get_next(needle);
while(i < haystack.length() && j < needle.length())
{
if(j == -1 || haystack.charAt(i) == needle.charAt(j))
{
++i;++j;
}
else
{
j = next[j];
}
}
//判断是否匹配成功
if(j >= needle.length())
return i - j;
return -1;
}
//next[j]计算函数
private int[] get_next(String needle)
{
if(needle.length() == 0)
return null;
int[] next = new int[needle.length()];
//初始化
next[0] = -1;
int i = 0;
int j = -1;
while(i < needle.length() - 1)
{
if(j == -1 || needle.charAt(i) == needle.charAt(j))
next[++i] = ++j;
else
j = next[j];
}
return next;
}
}