1. 程式人生 > >[Leetcode28]實現strStr()

[Leetcode28]實現strStr()

實現 strStr() 函式。

給定一個 haystack 字串和一個 needle 字串,在 haystack 字串中找出 needle 字串出現的第一個位置 (從0開始)。如果不存在,則返回  -1

當 needle 是空字串時,我們應當返回什麼值呢?這是一個在面試中很好的問題。

對於本題而言,當 needle 是空字串時我們應當返回 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。

python:

class Solution:
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        p,q = len(haystack),len(needle)
        if q == 0:
            return 0
        n = p - q
        if n < 0 or (n == 0 and haystack[0] != needle[0]):
            return -1
        i,j = 0,0
        while i < p:
            if haystack[i] == needle[j]:
                if j == (q - 1):
                    return i - j
                else:
                    i += 1
                    j += 1
            else:
                i = i - j + 1
                j = 0
        return -1

C++: 

class Solution {
public:
    int strStr(string haystack, string needle) {
        int p = haystack.length();int q = needle.length();int n = p - q;
        if(q == 0) return 0;
        if(n < 0 || (n == 0 && haystack[0] != needle[0])) return -1;
        int i = 0;int j = 0;
        while(i < p){
            if(haystack[i] == needle[j]){
                if(j == (q - 1)) return i - j;
                else{
                    i += 1;j += 1;
                }
            }
            else{
                i = i - j + 1;j = 0;
            }
        }
        return -1;
    }
};