目標(biāo):
1.實(shí)現(xiàn)LeetCode - 14.Longest Common Prefix
原題目:
Write a function to find the longest common prefix string amongst an array of strings.
解題思路:
首先浪南,找出最短的字符串免糕;
然后娜氏,將最短的字符串和其他每一個(gè)字符串作比較流礁;
比較后,記錄公共的前綴字符的位置和上一次記錄做比較,得出最小的index;
使用最短字符串根據(jù)index汤踏,得到Longest Common Prefix
2.Swift4.0字符串新特性使用
Swift 4 新增了一個(gè)語(yǔ)法糖 织鲸,可以對(duì)字符串進(jìn)行單側(cè)邊界取子串。
去掉了 characters
題目實(shí)現(xiàn):
func longestCommonPrefix(_ strs: [String]) -> String {
if strs.count < 1 {
return ""
}
if strs.count == 1 {
return ""
}
var stringArray : Array = strs
//排序找出最短的字符串
for i in (0 ..< stringArray.count-1){
for j in (i + 1 ..< (stringArray.count)) {
if stringArray[i].count >= stringArray[j].count {
stringArray.swapAt(i, j)
}
}
}
if stringArray[0] == "" {
return ""
}
var distance = 0 //記錄上一次位置的變量
let shortString : String = stringArray[0] //第一個(gè)長(zhǎng)度最短的字符串
//將第一個(gè)最短的字符串和后邊的每一個(gè)作比較溪胶,找出最短的前綴
for i in (1 ..< stringArray.count) {
var tempDistance = 0 //記錄本次位置的變量 (每次比較都會(huì)置為0)
for j in (1 ... shortString.count) { //將最短字符串每一個(gè)字符和每一個(gè)字符串的每一個(gè)字符作比較
let tempString : String = stringArray[i]
let shortindex = shortString.index(shortString.startIndex, offsetBy: j)
let tempindex = tempString.index(tempString.startIndex, offsetBy: j)
print(shortString, tempString)
let a = String(shortString.prefix(upTo: shortindex))
let b = String(tempString.prefix(upTo: tempindex))
print(a, b)
if shortString.prefix(upTo: shortindex) == tempString.prefix(upTo: tempindex) {
tempDistance = tempDistance + 1
} else {
if j == 1 {
return "no prefix"
} else {
break
}
}
}
if distance == 0 {
distance = tempDistance
}
if (distance >= tempDistance) {
distance = tempDistance
}
tempDistance = 0
}
print("distance" , distance)
let resultindex = shortString.index(shortString.startIndex, offsetBy: distance)
print("resultindex" , resultindex)
let resultSubstring = String(shortString.prefix(upTo: resultindex))
print("resultSubstring" , resultSubstring)
return String(resultSubstring)
}