最長公共字首(Longest-Common-Prefix)
題幹如下:
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 “”。
示例 1:
輸入: [“flower”,”flow”,”flight”]
輸出: “fl”
示例 2:
輸入: [“dog”,”racecar”,”car”]
輸出: “”
解釋: 輸入不存在公共字首。
說明:所有輸入只包含小寫字母 a-z 。
來源:力扣
解題思路
首先我們從題幹入手,求字串陣列的公共字首,那麼什麼是公共字首呢?其實就是所有字串都有的子串,並且這個子串的位置還比較特殊,它在字串的開始位置。
有了這個認知之後,我們隨意取兩個字串 S1 和 S2,先得出 S1 和 S2 的公共字首,記為 P1。如果沒有公共字首,那麼直接返回空字串,如果存在 P1,那麼將 P1 和 S3 比較,得出公共字首 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 協議》,轉載必須註明作者和本文連結