Implement strStr()

来源:互联网 发布:cpda项目数据分析挂靠 编辑:程序博客网 时间:2024/06/08 14:45

Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Update (2014-11-02):
The signature of the function had been updated to return the index instead of the pointer. If you still see your function signature returns a char * or String, please click the reload button  to reset your code definition.

Show Tags

Have you met this question in a real interview? 

思路1 : 直接用暴力求解,找到字串的位置,

思路2 : 用 kmp 来解, 参考 我自己写的 KMP算法。


易错点: 1. 注意回溯到t 的头时候, j = -1, 这个时候 i 和 j  都要 ++ , 从头开始嘛。

2. 注意生成 next 数组的时候, 第一位要 -1, 最后一位不用比较。


public class Solution {    public int strStr(String haystack, String needle) {        int n = haystack.length();        int m = needle.length();        if (n < m)             return -1;        if (m == 0)            return 0;        if (n == 0)            return -1;        return KMP(haystack, needle);    }        public int KMP(String s, String t){        int[] next = new int[t.length()];        nextGenerate(t, next);        int i = 0;        int j = 0;        while(i < s.length()){            if(j == -1 || s.charAt(i) == t.charAt(j)){//-------                i++;                j++;            }else{                j = next[j];            }            if(j == t.length())                return i - j;        }        return -1;}private void nextGenerate(String t, int[] next){    next[0] = -1;    for(int i = 1; i < t.length() - 1; i++){//-------        if(t.charAt(i) == t.charAt(next[i]))            next[i + 1] = next[i] + 1;        else            next[i + 1] = 0;    }}}




0 0
原创粉丝点击