最后一遍-L28-Implement strStr()

Implement strStr().

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

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().


Example 1:

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

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

Input: haystack = "", needle = ""
Output: 0


Constraints:


0 <= haystack.length, needle.length <= 5 * 104
haystack and needle consist of only lower-case English characters.

按照题目的意思,进行编码

import util.ListNode;

public class Solution {


    public static void main(String[] args) {
        System.out.println(strStr("abcdfgderfh", "der"));
    }


    /**
     * we will return 0 when needle is an empty string.
     * This is consistent to C's strstr() and Java's indexOf().
     *
     * @param source target
     * 0 <= haystack.length, needle.length <= 5 * 104
     * haystack and needle consist of only lower-case English characters.
     *
     * code: follow the problem
     *
     * example  source="abcfgde" target="de"
     * */

    public static int strStr(String source, String target) {
        if (target == null || target.isEmpty()) {
            return 0;
        } else {
            char targetFirst = target.charAt(0); //'d'
            int max = source.length() - target.length();// 5
            for (int i = 0; i <= max; i++) {
                /** Look for fisrt charscter. */
                if (source.charAt(i) != targetFirst) {
                    while (++i <= max && source.charAt(i) != targetFirst) ;
                }

                /* Found targetFirst character,now look at the rest of v2*/
                if (i <= max) {
                    int j = i + 1, end = j + target.length() - 1;
                    for (int k = 1; j < end && source.charAt(j) == target.charAt(k); j++, k++) ;
                    if (j == end) {
                        /* Found whole string*/
                        return i;
                    }
                }
            }
        }
        return -1;
    }
}

Powered by andiHappy and Theme by AndiHappy