給定兩個字符串s, t 判斷s是否是t的子序列
附: 字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串
例如:
s = "axc", t = "ahbgxc" 返回 true.
s = "ayh", t = "ahbgxc" 返回 false.
方法1
func isSubsequence(_ s: String, _ t: String) -> Bool {
//將s字符串轉(zhuǎn)成char數(shù)組
var charArr = [Character](), cut = t, iterator = s.makeIterator()
while let char = iterator.next() {
charArr.append(char)
}
//循環(huán), 條件char數(shù)組不為空
while !charArr.isEmpty {
//數(shù)組刪除第一個元素, 并獲取這個元素
let element = charArr.removeFirst()
//判斷t中是否含有這個元素, 并獲取元素下標(biāo), 不包含跳出循環(huán)
if let index = cut.firstIndex(of: element) {
//切割數(shù)組, 只留下下標(biāo)之后的部分
cut = cut.substring(from: cut.index(index, offsetBy: 1))
}else {
return false
}
}
//如果都t包含s, 則charArr則會為空, 返回charArr.isEmpty是否為空數(shù)組即可
return charArr.isEmpty
}
方法2
循環(huán)判斷, b中是否一一包含s中元素, 雙指針法
func isSubsequence(_ s: String, _ t: String) -> Bool {
var i = 0, j = 0
while i < s.count && j < t.count {
let a = s.index(s.startIndex, offsetBy: i), b = t.index(t.startIndex, offsetBy: j)
if s[a] == t[b] {
i+=1
}
j+=1
}
return i == s.count
}
題目來源:力扣(LeetCode) 感謝力扣爸爸 :)