★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a string S of lowercase letters, a duplicate removal consists of choosing two adjacent and equal letters, and removing them.
We repeatedly make duplicate removals on S until we no longer can.
Return the final string after all such duplicate removals have been made. It is guaranteed the answer is unique.
Example 1:
Input:
Note:
1 <= S.length <= 20000-
Sconsists only of English lowercase letters.
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
示例:
输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
提示:
1 <= S.length <= 20000-
S仅由小写英文字母组成。
Runtime: 132 ms
Memory Usage: 21.4 MB
1 class Solution { 2 func removeDuplicates(_ S: String) -> String { 3 var res:String = String() 4 for c in S 5 { 6 if res.isEmpty || res.last! != c 7 { 8 res.append(c) 9 } 10 else 11 { 12 res.popLast() 13 } 14 } 15 return res 16 } 17 }
132ms
1 class Solution { 2 func removeDuplicates(_ S: String) -> String { 3 var s = S 4 var i = s.startIndex 5 while !s.isEmpty && s.index(after: i) != s.endIndex { 6 if s[i] == s[s.index(after: i)] { 7 s.remove(at: i) 8 s.remove(at: i) 9 if i != s.startIndex { 10 i = s.index(before: i) 11 } 12 continue 13 } 14 i = s.index(after: i) 15 } 16 return s 17 } 18 }
144ms
1 class Solution { 2 func removeDuplicates(_ S: String) -> String 3 { 4 var list: [Character] = [] 5 for c in S 6 { 7 if let last = list.last 8 { 9 if last == c { 10 list.removeLast() 11 } 12 else { list.append(c) } 13 } 14 else { 15 list.append(c) 16 } 17 } 18 return String(list) 19 } 20 }
196ms
1 class Solution { 2 func removeDuplicates(_ S: String) -> String { 3 var stack = [Character]() 4 5 for char in S { 6 if stack.last == char { 7 stack.removeLast() 8 } else { 9 stack.append(char) 10 } 11 } 12 13 return String(stack) 14 } 15 }