編寫乙個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 「」。
示例 1:
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共字首。
說明:所有輸入只包含小寫字母a-z
。
依次遍歷字串陣列中的每個字串,對於每個遍歷到的字串,更新最長公共字首,當遍歷完所有的字串以後,即可得到字串陣列中的最長公共字首。說人話就是我們直接乙個乙個的比,先獲取第乙個和第二個的相同字首,然後我們拿這個相同的字首和第三個比最後依次比完,得到最長的公共字首
示例**:
package main
import
"log"
func
longestcommonprefix
(strs [
]string
)string
prefix := strs[0]
count :=
len(strs)
for i :=
1; i < count; i++
}return prefix
}func
lcp(str1, str2 string
)string
return str1[
:index]
}func
min(x, y int
)int
return y
}func
main()
) log.
println
(text)
}
縱向掃瞄時,從前往後遍歷所有字串的每一列,比較相同列上的字元是否相同,如果相同則繼續對下一列進行比較,如果不相同則當前列不再屬於公共字首,當前列之前的部分為最長公共字首。縱向掃瞄更簡單,就是直接遍歷所有的字串,然後從第一位開始比較,如果發現不同的那麼就直接退出
這個方法看起來不明所以,實際上就是利用了遞迴的思想,比對這麼多很麻煩,我們就把這這個陣列分成兩部分,這裡兩部分繼續細分,直到只剩下兩個字串為止,這樣我們就可以直接比對這兩個字串,返回結果,然後再遞迴回去。。
首先我們看**,先找中值,然後這裡再呼叫自己本身獲取左邊的值和右邊的值,我們這裡先不管遞迴,這裡執行完畢後會只返回左邊的字串和右邊的字串,最後我們只需要找到這兩個字串的公共字首就可以了。
參考**
首先最重要的就是找到最短的那個字串,找到之後我們就可以開始比較了,通過乙個low和height來比較,low為0,height為最短字串長度,我們先取中間值,然後比對所有字串,判斷這個字首是否相等,如果相等那麼low就等於中間值,然後再取low和height的中間值,如果不相等,那麼就說明字首要比中間值小,我們的height就直接設定為中值減一,直到low等於height就說明找到最短字首了
package main
import
"log"
func
longestcommonprefix
(strs [
]string
)string
// 這個函式用於判斷指定長度下所有的字元陣列的字首是否相等
iscommonprefix :=
func
(length int
)bool
}return
true
}// 首先我們假設距離最短的就是列表的第乙個值
minlength :=
len(strs[0]
)// 這裡我們通過遍歷,獲取到最短字串的長度
for_
, s :=
range strs
} low, high :=
0, minlength
// 這裡我們通過low和height來判斷最長的公共字首,當low等於height的時候,就說明已經找到了
for low < high
else
}return strs[0]
[:low]
}func
main()
) log.
println
(text)
}
挑戰字串 最長公共字首
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母 a z 這題用c 比較好做,string 直接 ...
python 字串最長公共字首
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。def longestcommonpref...
字串最長公共字首問題
leetcode練題筆記第二篇 編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母 a z 橫向掃瞄...