空无以求全
宁静以致远
当前位置:首页 > .html

IOS 算法(基础篇) ----- 删除字符串中的所有相邻重复项

作者:大熊空间发布时间:2022-02-19 17:09分类: 浏览:238评论:0


导读: 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符...

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

例子

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

解题思路

栈方法

比较典型的一道栈方法题目

可以通过栈的 后进先出 思路进行求解
由于最后结果返回的是字符串, 那么我们用字符串代替栈数组进行求解

例如: s = "abbaca", result = "",
循环s每一个字符判断 i 是否与result的最后一个字符相等, 相等移除最后一个字符, 不相等result添加i

第一次循环: i = a, result = "a"
第二次循环: i = b, result = "ab"
第三次循环: i = b, result = "a"
第四次循环: i = a, result = ""
第五次循环: i = c, result = "c"
第六次循环: 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 = ""

        // 循环S中每一个字符
        for i in S {

            //如果 i 等于 result最后一个字符
            if i == result.last {

                // result移除最后一个字符
                result.removeLast()

            }else {

                // result拼接i
                result += String(i)

            }
        }

        // 返回结果
        return result
    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址


发表评论: