当前位置:首页
> .html
导读:
给出由小写字母组成的字符串 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 算法合集地址
发表评论: