一贮乳、題目原型:
給定一個 haystack 字符串和一個 needle 字符串自晰,在 haystack 字符串中找出 needle 字符串出現(xiàn)的第一個位置 (從0開始)凿试。如果不存在,則返回 -1平夜。
二、示例剖析:
輸入: haystack = "hello", needle = "ll"
輸出: 2
輸入: haystack = "aaaaa", needle = "bba"
輸出: -1
說明:
當(dāng) needle 是空字符串時卸亮,我們應(yīng)當(dāng)返回什么值呢忽妒?這是一個在面試中很好的問題。
對于本題而言兼贸,當(dāng) needle 是空字符串時我們應(yīng)當(dāng)返回 0 段直。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。
三寝受、解題思路:
1.方法簡單坷牛,運用swift語言特性
func strStr(_ haystack: String, _ needle: String) -> Int {
if needle.count == 0 {
return 0
}
let range = haystack.range(of: needle)
return range?.lowerBound.encodedOffset ?? -1
}
2.將字符串變成數(shù)組,進(jìn)行遍歷很澄。(借鑒top1的方案,其實也簡單,就是看起來代碼貌似會比較多)
func strStr(_ haystack: String, _ needle: String) -> Int {
let count1 = haystack.count
let count2 = needle.count
if count2 == 0 {
return 0
}
if count1 < count2 {
return -1
}
var haystackChars = haystack.cString(using: .utf8)!
var needleChars = needle.cString(using: .utf8)!
var i = 0
var j = 0
let maxi = count1 - count2
let maxj = count2 - 1
while i <= maxi && j <= maxj {
var m = i
while m <= count1 - 1 && j <= maxj {
let mv = haystackChars[m]
let jv = needleChars[j]
if mv == jv {
m += 1
j += 1
continue
}
j = 0
i += 1
break
}
}
j = j - 1
if j == maxj{
return i
}
return -1
}
四甩苛、小結(jié)
1.耗時856
毫秒蹂楣,超過32.58%
的提交記錄,總提交數(shù)74
讯蒲。
2.耗時12
毫秒痊土,超過100%
的提交記錄,總提交數(shù)74
墨林。