[LeetCode]28. Implement strStr()

本文详细介绍了KMP算法的基本原理及其在字符串匹配问题中的应用,并通过LeetCode上的经典题目“实现strStr()”来展示如何使用KMP算法高效解决字符串搜索问题。文章提供了完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem Description

Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
[https://leetcode.com/problems/implement-strstr/]

思路

其实不用KMP就可以的,,但是还是练一下KMP吧。。
参见下文[http://www.cnblogs.com/c-cloud/p/3224788.html]

Code

package q28;

public class Solution {

    public static void getNext(String a, int[] next) {
        int q,k;
        int m = a.length();
        next[0] = 0;
        for (q = 1,k = 0; q < m; ++q)
        {
            while(k > 0 && a.charAt(q) != a.charAt(k))
                k = next[k-1];
            if (a.charAt(q) == a.charAt(k))
            {
                k++;
            }
            next[q] = k;
        }

    }

    public static int strStr(String haystack, String needle) {
        if (needle.length() > haystack.length())
            return -1;
        if (needle.length() < 1 || haystack.length() < 1)
            return 0;
        int next[] = new int[needle.length()];
        getNext(needle, next);
        int q=0;
        for (int i = 0; i < haystack.length(); i++) {
            while(q > 0 && needle.charAt(q) != haystack.charAt(i))
                q = next[q-1];
            if (needle.charAt(q) == haystack.charAt(i))
            {
                q++;
            }
            if (q == needle.length())
            {
                return i-needle.length()+1;
            }

        }
        return -1;
    }

//  public static void main(String[] args) {
//      String a = "mississippi";
//      String b = "issip";
//
//      System.out.println(a.indexOf(b));
//      System.out.println(strStr(a, b));
//
//  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值