Open ShannonChenCHN opened 3 years ago
2021.05.08 08:30 am ~ 09:00 am 2021.05.09 10:00 am ~ 11:00 am
参考题解:
思路:两个指针 i
和 j
分别指向 haystack
和 needle
,遍历 haystack
,每次以第 i 个字母作为首字母,跟 needle
逐个字母进行比较。
边界条件:需要考虑 haystack
和 needle
长度为 0 以及两者长度相同的情况。
时间复杂度:O(m x n) 空间复杂度:O(1)
使用 while 语句:
class Solution {
func strStr(_ haystack: String, _ needle: String) -> Int {
let m = haystack.count
let n = needle.count
guard n > 0 else {
return 0
}
let haystackList = Array(haystack)
let needleList = Array(needle)
var i = 0
while i <= (m-n) {
// 从第 i 个开始逐字比较
var j = 0
while j < n {
if haystackList[i+j] != needleList[j] { // 逐个字母比较
break
}
if j == n - 1 { // 最后一个字母都匹配成功了,说明完全匹配
return i
}
j += 1
}
i += 1
}
return -1
}
}
使用 for 循环:
class Solution {
func strStr(_ haystack: String, _ needle: String) -> Int {
let m = haystack.count
let n = needle.count
guard n > 0 else {
return 0
}
let haystackList = Array(haystack)
let needleList = Array(needle)
for i in stride(from: 0, through: m-n, by: 1) { // 注意:这里不能用 for i in 0...m-n 的形式
// 从第 i 个开始逐个比较
for j in stride(from: 0, to: n, by: 1) {
if haystackList[i+j] != needleList[j] { // 逐个字母比较
break
}
if j == n - 1 { // 最后一个字母都匹配成功了,说明完全匹配
return i
}
}
}
return -1
}
}
TODO
大纲
题目列表