IOS 算法(基礎(chǔ)篇) ----- 刪除字符串中的所有相鄰重復項

給出由小寫字母組成的字符串 S,重復項刪除操作會選擇兩個相鄰且相同的字母,并刪除它們。在 S 上反復執(zhí)行重復項刪除操作,直到無法繼續(xù)刪除。在完成所有重復項刪除操作后返回最終的字符串。答案保證唯一。

例子

輸入:"abbaca"
輸出:"ca"
解釋:
例如,在 "abbaca" 中,我們可以刪除 "bb" 由于兩字母相鄰且相同,這是此時唯一可以執(zhí)行刪除操作的重復項。之后我們得到字符串 "aaca",其中又只有 "aa" 可以執(zhí)行重復項刪除操作,所以最后的字符串為 "ca"。

解題思路

棧方法

比較典型的一道棧方法題目

可以通過棧的 后進先出 思路進行求解
由于最后結(jié)果返回的是字符串, 那么我們用字符串代替棧數(shù)組進行求解

例如: s = "abbaca", result = "",
循環(huán)s每一個字符判斷 i 是否與result的最后一個字符相等, 相等移除最后一個字符, 不相等result添加i

第一次循環(huán): i = a, result = "a"
第二次循環(huán): i = b, result = "ab"
第三次循環(huán): i = b, result = "a"
第四次循環(huán): i = a, result = ""
第五次循環(huán): i = c, result = "c"
第六次循環(huán): i = a, result = "ca", 返回 result

未翻譯版
    func removeDuplicates(_ S: String) -> String {
        var result = ""
        for i in S {
            if i == result.last { result.removeLast() }
            else { result += String(i) }
        }
        return result
    }
翻譯版
    func removeDuplicates(_ S: String) -> String {

        // 定義result
        var result = ""

        // 循環(huán)S中每一個字符
        for i in S {
 
            //如果 i 等于 result最后一個字符
            if i == result.last {
                 
                // result移除最后一個字符
                result.removeLast()
                
            }else {

                // result拼接i
                result += String(i)
                
            }
        }
       
        // 返回結(jié)果
        return result
    }

題目來源:力扣(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)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

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