LeetCode刷题(Java)——4.Implement strstr()

Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

Example 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Example 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

Clarification:

What should we return when needle is an empty string? This is a great question to ask during an interview.

For the purpose of this problem, we will return 0 when needle is an empty string. This is consistent to C's strstr() and Java's indexOf().

本娃子码的代码,时间超限了,所以也没法调试,这里也放一下:

class Solution {
    public int strStr(String haystack, String needle) {
        int result = -1;
        for(int i=0,j=0;i

然后去看这题的文档,总结如下,感触颇多:

我写的方法就是蛮力方法,即从第一个位置开始匹配后续字母,假设n=haystack的length, m=needle的length,则时间复杂度为:O(nm)。可以考虑以下几种情况:

1. 两个都为空。如果needle为空,总是返回0;如果haystack为空,needle不为空,则返回 -1,因为没有值匹配;

2.needle的长度大于haystack的长度,很明显,没有值匹配,返回-1;

3.如果有两个长度相等都为n的长串:"aa……aa","aa……ab",你不需要做超过n个字符的对比,否则就会导致时间超限

基于以上几点,被AC代码如下:

class Solution {
    public int strStr(String haystack, String needle) {
        for(int i=0; ;i++){
            for(int j=0; ;j++){
                if(j == needle.length()) return i;
                if(i + j == haystack.length()) return -1;
                if(needle.charAt(j) != haystack.charAt(i+j)) break;
            }
        }
    }
}

温馨小提示:Java中可以使用indexOf来返回一个整数值,例如:

int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引,如果没有找到就返回-1.

 

 

 

 

你可能感兴趣的:(LeetCode)