leetcode 28 Implement strStr()

35 篇文章 0 订阅
35 篇文章 0 订阅

题目

28. Implement strStr()
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

思路:

开始我想用KMP算法求解,但是时间大概要7~8ms,这效率太低了。由于JAVA的String不同于C中的字符数组,所以用KMP比较还不如暴力破解来得快,也可能是我能力有限,没有能力针对JAVA对KMP算法进行优化。

代码:

public int strStr(String haystack, String needle)
{
    if(needle.length() == 0)
        return 0;
    for(int i = 0; i < haystack.length() - needle.length() + 1; i++)
    {
        if(needle.equals(haystack.substring(i,i+needle.length())))
            return i;
    }
    return -1;
}

结果细节(图):

image

附:KMP实现(Java)

public int strStr(String haystack, String needle)
{
    if(needle.length() == 0)
        return 0;
    char[] T = haystack.toCharArray();
    char[] P = needle.toCharArray();
    return kmp(T, P);
}

private int kmp(char[] T, char[] P)
{
    int n = T.length;
    int m = P.length;
    int[] next = getNext(P);
    int q = -1;
    for(int i = 0; i < n; i++)
    {
        while(q >= 0 && P[q+1] != T[i])
            q = next[q];
        if(P[q+1] == T[i])
            q++;
        if(q == m-1)
            return i-m+1;
    }
    return -1;
}

private int[] getNext(char[] P)
{
    int[] next = new int[P.length];
    int k=-1;
    next[0] = -1;
    for(int q = 1; q < P.length;q++)
    {
        while(k >= 0 && P[k+1] != P[q])
            k = next[k];
        if(P[k+1] == P[q])
            k++;
        next[q] = k;
    }
    return next;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值