1. 程式人生 > >leetcode的python實現 刷題筆記28:實現strStr()

leetcode的python實現 刷題筆記28:實現strStr()

實現 strStr() 函式。

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

示例 1:

輸入: haystack = "hello", needle = "ll"
輸出: 2

示例 2:

輸入: haystack = "aaaaa", needle = "bba"
輸出: -1

說明:

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

對於本題而言,當 needle

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

class Solution:
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        if len(haystack) == len(needle):
            if haystack == needle:
                return 0
            else:
                return -1

        for i in range(0,len(haystack)):
            j = 0
            k = i
            while j<len(needle) and k<len(haystack) and needle[j] == haystack[k]:
                j+=1
                k+=1

            if j == len(needle):
                return i
        return -1 if needle else 0

sl = Solution()
print(sl.strStr("hello","lo"))
print(sl.strStr("aaaaa","ll"))

總結:

思路

1.是首先判斷兩個字串是否相同,如果相同,返回0,說明從第一個元素開始就已經相同。否則就返回-1。

2.然後 遍歷兩個字串,使用了while迴圈做判斷,當出現第一個元素相同時,接著判斷這個元素後面的元素是否也相同,於是就j和k都自加1.當已經把第二個字串遍歷完之後,如果當前的j相等於needle的話,說明needle這個字串的長度小於haystack,然後說明while迴圈證明是正確的,返回當前的i位置,就是needle 字串在 haystack 字串中出現的第一個位置。

3.如果以上的還沒有執行,就判斷needl是否存在,如果存在就返回-1,否則說明是空字串,返回0.

要注意的點:

1.字串是 Python 中最常用的資料型別。我們可以使用引號('或")來建立字串,如

var1 = 'Hello World!'

2.Python訪問子字串,可以使用方括號來擷取字串,如

print(var1[0])

3.return 語句就是講結果返回到呼叫的地方,並把程式的控制權一起返回。

程式執行到所遇到的第一個return即返回(退出def塊),不會再執行第二個return。

值得注意的是,一個函式體中可以有一個return 語句。

函式沒有 return,預設 return一個 None 物件。