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

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

作者: ShawnAlex | 来源:发表于2021-03-09 14:19 被阅读0次

给出由小写字母组成的字符串 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 算法合集地址

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ilxbqltx.html