IOS 算法(基礎(chǔ)篇) ----- 判斷子序列

給定兩個字符串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) 感謝力扣爸爸 :)

IOS 算法合集地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容