讓我們一起啃演算法----最長公共字首

三斤和他的喵發表於2020-04-15

最長公共字首(Longest-Common-Prefix)

題幹如下:

編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 “”。
示例 1:
  輸入: [“flower”,”flow”,”flight”]
  輸出: “fl”
示例 2:
  輸入: [“dog”,”racecar”,”car”]
  輸出: “”
解釋: 輸入不存在公共字首。
說明:所有輸入只包含小寫字母 a-z 。
來源:力扣

解題思路

首先我們從題幹入手,求字串陣列的公共字首,那麼什麼是公共字首呢?其實就是所有字串都有的子串,並且這個子串的位置還比較特殊,它在字串的開始位置

有了這個認知之後,我們隨意取兩個字串 S1S2,先得出 S1S2 的公共字首,記為 P1。如果沒有公共字首,那麼直接返回空字串,如果存在 P1,那麼將 P1S3 比較,得出公共字首 P2,以此類推。( P1的長度一定是大於等於 P2 )。

至於如何求公共字首 P,流程圖如下:

程式碼實現

GO語言實現

func longestCommonPrefix(strs []string) string {
    if len(strs) <= 0 {
        return ""
    }
    // 將字首初始化為第一個元素值
    var prefix = strs[0]
    for i := 1; i< len(strs); i++ {
        // 判斷字串是否是prefix開頭的,如果是 strings.Index 返回 0
        if strings.Index(strs[i], prefix) != 0 {
            // 去掉字首的最後一個字元
            prefix = prefix[:len(prefix)-1]
            // 因為會執行 i++,為了保證 i 不變,先 i--
            i--
        }
    }
    return prefix
}

總結

每天進步一點點,加油!
完整程式碼:https://github.com/wx-satellite/go-leetcod…( 如果對你有幫助,點個 star 鼓勵一下喲 )

本作品採用《CC 協議》,轉載必須註明作者和本文連結

三斤

相關文章