leecode之Implement strStr()

KMP算法的实现:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int strStr(char* haystack, char* needle) {
    if (haystack == NULL || needle == NULL)
        return -1;
    if (needle[0] == ‘\0‘)
        return 0;
    int lenPattern = strlen(needle);
    int lenHaystack = strlen(haystack);
    int *shift = (int *)malloc(sizeof(int) * lenPattern);
    int i;
    shift[0] = 0;
    for (i = 1; i < lenPattern; i++){
        if (needle[shift[i - 1]] == needle[i])
            shift[i] = shift[i - 1] + 1;
        else
        {
            if (needle[i] == needle[0])
                shift[i] = 1;
            else
                shift[i] = 0;
        }
    }

    int j = 0;
    for (i = 0; i < lenHaystack;)
    {
        if (haystack[i] == needle[j])
        {
            i++;
            j++;
            if (j == lenPattern)
                return (i - j);
        }
        else
        {
            if (j == 0)
            {
                i++;
            }
            else
            {
                j = shift[j - 1];
            }

        }
    }
    return -1;
}

int main()
{
    //char *input = "";
    //char *pattern = "";
    char *input = "BBC ABCDAB ABCDABCDABDE";
    char *pattern = "ABCDABD";
    printf("%d\n", strStr(input, pattern));

    return 0;
}
时间: 2024-10-01 02:56:28

leecode之Implement strStr()的相关文章

[leecode]Implement strStr()

Implement strStr() Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 实现String.class中的contains()接口. KMP算法 不了解该算法的,请移步KMP算法小结.这个也属于必须要掌握的算法. [未通过case]needle == “” 代码如下: publi

LeetCode 28. Implement strStr()

https://leetcode.com/problems/implement-strstr/ Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 字符串简单题.一定要写的没BUG. 如果不在函数最后一行写return语句的话,LeetCode会出RUNTIME ERROR. Line 27: co

Implement strStr()

package cn.edu.xidian.sselab.string; /** *  * @author zhiyong wang * title: Implement strStr() * content: *  Implement strStr(). *   *  Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.  * */pub

【LeetCode】Implement strStr()

Implement strStr() Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 标准KMP算法.可参考下文. http://blog.csdn.net/yaochunnian/article/details/7059486 核心思想在于求出模式串前缀与后缀中重复部分,将重复信息保存在n

【leetcode】Implement strStr() (easy)

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 思路: 注意,在for循环中条件有计算得到的负数时, 一定要把计算括起来转换为int, 否则会默认转换为uchar 负数就会被误认为是一个很大的数字. for(int i = 0; i < int(1 - 2); ++i) 实现很常规: int s

LeetCode Implement strStr()

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

Implement strStr()——字符串中第一次出现给定字符串的位置

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41452047 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 func

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. 非常容易的一道题目,注意各种特殊情况,先列举出corner case,再进行编码.学习参考经典实现. 这种关于字符串操作类的题目在面试时必须能够倒背如流. int strStr(char* haystack, char* needle) { if

44. leetcode 28. Implement strStr()

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. 思路:子串匹配,朴素匹配.