swift演算法 最長公共字首

2021-09-23 10:10:29 字數 1852 閱讀 8626

描述:編寫乙個函式來查詢字串陣列中的最長公共字首,如果不存在公共字首,返回空字串""

注:所有輸入只包含小寫字母a-z

例1:輸入:["flower","flow","flight"]

輸出:"fl"

例2:輸入:["dog", "racecar","car"]

輸出:""

解釋:輸入不存在公共字首

一、水平掃瞄法

1、橫向掃瞄

思路:兩兩字串對比,找出公共字首,在將公共字首和第三個字串對比...以此類推,最後得到的公共字首為陣列的最長公共字首

時間複雜度:o(n),n為所有字串中字元數量的總和

具體實現:

func longestcommonprefix(_ strs: [string]) -> string 

var longprefix : string = strs[0]

for i in 1..longprefix.count ? longprefix.count : strs[i].count

var j = 0

//針對陣列第二個字串開始的遍歷,用for和while都可以

// for j in 0..2、縱向掃瞄

思路:從前往後遍歷字串的每一列,先比較每個字串相同列上的字元 即 不同字串相同下標的字元,然後再進行對比下一列,在對比時,如果滿足第乙個字元的下標等於任意乙個字串的長度 或者 遍歷另乙個字串相同下標的字元不同時 任一條件時,返回公共字首

時間複雜度:o(n),n為所有字串中字元數量的總和

具體實現:

func longestcommonprefix(_ strs: [string]) -> string

var first = strs[0]

for i in 0..二、分治法

思路:將字串陣列拆分為左右兩個子陣列,分別比較左右兩個陣列中的字串,直到不能匹配為止

時間複雜度:o(n),n為所有字串中字元數量的總和

具體實現:

func longestcommonprefix(_ strs: [string]) -> string

return self.longestcommonprefix(strs, 0, strs.count-1)

}func longestcommonprefix(_ strs: [string], _ left : int, _ right : int) -> string

else

}func commonprefix(_ left : string, _ right : string)->string

//找到輸入的資料中最短的字串的長度

var mincount = strs[0].count

for i in 1..strs[i].count) ? strs[i].count : mincount

}var low = 1

var hight = mincount

while low <= hight else

}return (strs[0] as! nsstring).substring(with: nsmakerange(0, (low+hight)/2))

}func iscommonprefix(_ strs : [string], _ len : int)->bool

}return true

}

演算法 最長公共字首

編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 輸入 flower flow flight 輸出 fl 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。class solution 對result擷取公共部分 result result.substr...

演算法 最長公共字首

題目描述 編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母 a z 解題 使用分治法求解,找出左側...

最長公共字首

描述 給k個字串,求出他們的最長公共字首 lcp 樣例 在 abcd abef 和 acef 中,lcp 為 a 在 abcdefg abcefg abcefa 中,lcp 為 abc 新知識點 vectorstrs既可以是一維的,也可以是多維的。在這裡講解三維的初始化。vector str str...