描述:編寫乙個函式來查詢字串陣列中的最長公共字首,如果不存在公共字首,返回空字串""
注:所有輸入只包含小寫字母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...