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

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

Problem: Implement strStr(). Returns the index of the first occurrence of needle in haystack...
  • runningtortoises
  • runningtortoises
  • 2015年05月12日 11:59
  • 1503

28. Implement strStr()-leetcode-java

【原来在SAE的blog上,都转到CSDN了。。】 28. Implement strStr()-leetcode-java 发表于 2016/02/06 题意 ...
  • hahawhyha
  • hahawhyha
  • 2016年05月06日 18:50
  • 958

[LeetCode] 028. Implement strStr() (Easy) (C++/Python)

[LeetCode] 028. Implement strStr() (Easy) (C++/Python)
  • hcbbt
  • hcbbt
  • 2015年03月06日 15:05
  • 2551

[28] Implement strStr()

给定两个字符串,判断一个字符串是不是另一个字符串的子串,如果是返回第一个字串位置,如果不是返回-1。...
  • camlot_
  • camlot_
  • 2016年07月28日 00:00
  • 927

28. Implement strStr() java

28 Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if ne...
  • u013272948
  • u013272948
  • 2016年11月27日 22:26
  • 526

[LeetCode][Java] Implement strStr()

题目: Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1...
  • Evan123mg
  • Evan123mg
  • 2015年07月10日 20:43
  • 882

leetcode 28 Implement strStr() C++

写了一个暴力破解的,没想到用了4ms,是最快那部分的。。。效率是O(m*n) int strStr(string haystack, string needle) { if(...
  • a2331046
  • a2331046
  • 2016年06月17日 16:52
  • 175

[leetcode] 28. Implement strStr() 解题报告

题目链接:https://leetcode.com/problems/implement-strstr/ Implement strStr(). Returns the index of the...
  • qq508618087
  • qq508618087
  • 2015年12月28日 16:32
  • 647

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

题目: 题目翻译: 分析: C++实现: Java实现: Python实现: 感谢阅读,欢迎评论!...
  • dragon_dream
  • dragon_dream
  • 2014年04月14日 09:26
  • 3222

【Leetcode】:28. Implement strStr()问题 in JAVA

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if nee...
  • u013564276
  • u013564276
  • 2016年06月22日 20:32
  • 728
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Easy-题目57:28. Implement strStr()
举报原因:
原因补充:

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