Easy-题目57:28. Implement strStr()

原创 2016年05月30日 20:56:08

题目原文:
Implement strStr().
Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.
题目大意:
实现strStr()函数。返回needle字符串在haystack字符串中首次出现的下标,如果needle不是haystack的子串则返回-1.
题目分析:
c99中strstr函数的接口不对,因此使用Java中的indexOf()方法水过。
源码:(language:java)

public class Solution {
    public int strStr(String haystack, String needle) {
         return haystack.indexOf(needle);
    }
}

成绩:
1ms,beats 69.31%,众数1ms,29.29%.
cmershen的碎碎念:
附C99中strstr()函数源码:

char *strstr(constchar*s1,constchar*s2)
{
    int n;
    if(*s2)
    {
        while(*s1)
        {
            for(n=0;*(s1+n)==*(s2+n);n++)
            {
                if(!*(s2+n+1))
                    return(char*)s1;
            }
            s1++;
        }
        return NULL;
    }
    else
        return (char*)s1;
}

但是稍加改动(简单改动了一下return的部分)之后放入OJ居然会提示TLE!也许C99的源码存在问题有待思考。
再附jdk中indexOf的底层实现供研究:

static int indexOf(char[] source, int sourceOffset, int sourceCount,
            char[] target, int targetOffset, int targetCount,
            int fromIndex) {
        if (fromIndex >= sourceCount) {
            return (targetCount == 0 ? sourceCount : -1);
        }
        if (fromIndex < 0) {
            fromIndex = 0;
        }
        if (targetCount == 0) {
            return fromIndex;
        }

        char first = target[targetOffset];
        int max = sourceOffset + (sourceCount - targetCount);

        for (int i = sourceOffset + fromIndex; i <= max; i++) {
            /* Look for first character. */
            if (source[i] != first) {
                while (++i <= max && source[i] != first);
            }

            /* Found first character, now look at the rest of v2 */
            if (i <= max) {
                int j = i + 1;
                int end = j + targetCount - 1;
                for (int k = targetOffset + 1; j < end && source[j]
                        == target[k]; j++, k++);

                if (j == end) {
                    /* Found whole string. */
                    return i - sourceOffset;
                }
            }
        }
        return -1;
}

对了 这东西叫 kmp算法吧??

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

相关文章推荐

28. Implement strStr() [easy] (Python)

题目链接https://leetcode.com/problems/implement-strstr/题目原文 Implement strStr(). Returns the index...

LeetCode_Easy心得:28. Implement strStr()(C语言)

28. Implement strStr()
  • hhhhhyb
  • hhhhhyb
  • 2017年08月01日 14:20
  • 70

LeetCode 28 — Implement strStr()(C++ Java Python)

题目: 题目翻译: 分析: C++实现: Java实现: Python实现: 感谢阅读,欢迎评论!...

LeetCode 28_Implement strStr()

这是今天的第三题了,也是leetcode第28题,算法的难度也是easy,但字符串匹配这个问题本身是一个非常重要的问题。而其算法有相对简单的,有比较难的,今天我们来讲一个比较有深度的方法。当然,算法难...
  • cyfcsd
  • cyfcsd
  • 2015年11月25日 19:48
  • 389

Leetcode 28. Implement strStr()

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

[LeetCode] 28. Implement strStr()

[LeetCode] 28. Implement strStr()Implement strStr().Returns the index of the first occurrence of nee...

[LeetCode-28] Implement strStr(KMP 字符串匹配)

1、KMP算法的思想 由D.E.Knuth、J.H.Morris和V.R.Pratt共同提出了一个改进算法,消除了Brute-Force算法中串s指针的回溯,完成串的模式匹配。时间复杂度为O(s.c...

leetcode:28. Implement strStr()

Implement strStr().Returns the index of the first occurrence of needle in haystack, or -1 if needle ...
  • Earl211
  • Earl211
  • 2017年03月13日 09:03
  • 167

LeetCode 28 Implement strStr() (C,C++,Java,Python)

Problem: Implement strStr(). Returns the index of the first occurrence of needle in haystack...

【LEETCODE】28-Implement strStr()

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Easy-题目57:28. Implement strStr()
举报原因:
原因补充:

(最多只允许输入30个字)