日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

寻找最长公共前缀

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 寻找最长公共前缀 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

https://leetcode.com/problems/longest-common-prefix/

Write a function to find the longest common prefix string amongst an array of strings.

給定一個string數組,尋找公共的最長前綴;

假設給定數組 ab, ac, ad, 那么最長公共前綴為a

基本思路:

1. 切分出每個字符串的所有前綴,比如abc的前綴為, "", a, ab, abc;?

2. 將這些前綴連接成一個新的前綴數組;對于給定的例子, 可以得到,["", a, ab, "", a, ac, "", a, ad]的前綴數組;

3. 那么公共的前綴的,其數量必然等于輸入字符數組的總和n;比如 "" 肯定是一個公共前綴,那么在前綴數組總, 必然包含n個 "";

接下來的問題是怎么找到最長的公共前綴;

最簡單的方法先排序,然后依次掃描前綴, 并計數;直到找到一個計數少于n的前綴,那么前一個就是最長公共前綴;

但如果排過序了, 其實可以用二分查找的方式更快的找到答案;下面是二分查找的代碼:

package mainimport ("fmt""sort" )func main() {strs := []string{"flower", "flow", "flight"}fmt.Printf("%s\n", longestCommonPrefix(strs)) }func longestCommonPrefix(strs []string) string {if len(strs) == 0 {return ""}prefix := make([]string, 0, len(strs))for _, str := range strs {prefix = appendStrPrefix(prefix, str)}sort.Strings(prefix)return findCommonPrefix(prefix, len(strs)) }func findCommonPrefix(pres []string, n int) string {i, j := 0, len(pres)-1for i <= j {m := (i + j) / 2c := countOfPreAt(pres, m)if c == n {i = m + 1} else {j = m - 1}}return pres[i-1] }func countOfPreAt(pres []string, p int) int {s := pres[p]i := pfor i >= 0 && pres[i] == s {i--}j := pfor j < len(pres) && pres[j] == s {j++}return (j - 1) - (i + 1) + 1 }func appendStrPrefix(pre []string, str string) []string {for i := 0; i <= len(str); i++ {pre = appendMore(pre, str[:i])}return pre }func appendMore(strs []string, str string) []string {if len(strs)+1 == cap(strs) {tmp := make([]string, len(strs), 2*cap(strs))copy(tmp, strs)strs = tmp}return append(strs, str) }

?

轉載于:https://my.oschina.net/u/922297/blog/700126

總結

以上是生活随笔為你收集整理的寻找最长公共前缀的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。