題目: 最長公共前綴
描述:
編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴考赛。如果不存在公共前綴,返回空字符串 ""灶挟。
案例1:
輸入: ["flower","flow","flight"]
輸出: "fl"
案例2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴狮惜。
說明:
所有輸入只包含小寫字母 a-z 。
方案一:將字符串轉(zhuǎn)為[Character]踱讨,第一個(gè)和第二個(gè)求最長前綴,前綴和第三個(gè)求最長前綴...
代碼一:
func longestCommonPrefix(_ strs: [String]) -> String {
if strs.isEmpty { return "" }
if strs.count == 1 {
return strs.first!
}
//將[String] -> [[Character]]
var chars = strs.map{str in Array(str)}
//求兩個(gè)[Character] 的公共前綴
func twoLongestCommonPrefix(_ str1: [Character], str2: [Character]) -> [Character] {
var index = 0
var temp1 = [Character]()
while index < str1.count && index < str2.count {
if str1[index] == str2[index] {
temp1.append(str1[index])
index += 1
} else {
break
}
}
return temp1
}
var temp = chars[0]
for i in 1..<chars.count {
if temp.isEmpty {
break
}
temp = twoLongestCommonPrefix(temp, str2: chars[i])
print(temp)
}
return String(temp)
}
執(zhí)行用時(shí):28ms
方案二:取出第一個(gè)字符串砍的,使用后面的字符串判斷第一個(gè)字符串是否是他們的前綴痹筛,不是則將第一個(gè)字符串長度減一,繼續(xù)判斷
代碼二:
func longestCommonPrefix(_ strs: [String]) -> String {
let count = strs.count
if count == 0 {
return ""
}
if count == 1 {
return strs.first!
}
var result = strs.first!
for i in 1..<count {
while !strs[i].hasPrefix(result) {
result = String(result.prefix(result.count - 1))
if result.count == 0 {
return ""
}
}
}
return result
}
執(zhí)行用時(shí):16ms
開始我想的是如果字符串長度是無序的廓鞠,那么把字符串變?yōu)橛行蚴强梢蕴嵘实闹愠恚晕壹恿巳缦麓a 進(jìn)行排序
let s = strs.sorted{$0.count < $1.count}
但實(shí)際測試發(fā)現(xiàn),效率并未提升床佳、滋早、、我忽略了排序的時(shí)間砌们、杆麸、、浪感、尷尬了