为有牺牲多壮志,敢教日月换新天。

[Swift]LeetCode1190. 反转每对括号间的子串 | Reverse Substrings Between Each Pair of Parentheses

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(www.zengqiang.org
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/11521663.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

Given a string s that consists of lower case English letters and brackets. 

Reverse the strings in each pair of matching parentheses, starting from the innermost one.

Your result should not contain any bracket.

Example 1:

Input: s = "(abcd)"
Output: "dcba"

Example 2:

Input: s = "(u(love)i)"
Output: "iloveu"

Example 3:

Input: s = "(ed(et(oc))el)"
Output: "leetcode"

Example 4:

Input: s = "a(bcdefghijkl(mno)p)q"
Output: "apmnolkjihgfedcbq"

 

Constraints:

  • 0 <= s.length <= 2000
  • s only contains lower case English characters and parentheses.
  • It's guaranteed that all parentheses are balanced.

给出一个字符串 s(仅含有小写英文字母和括号)。

请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。

注意,您的结果中 不应 包含任何括号。

示例 1:

输入:s = "(abcd)"
输出:"dcba"

示例 2:

输入:s = "(u(love)i)"
输出:"iloveu"

示例 3:

输入:s = "(ed(et(oc))el)"
输出:"leetcode"

示例 4:

输入:s = "a(bcdefghijkl(mno)p)q"
输出:"apmnolkjihgfedcbq"

 

提示:

  • 0 <= s.length <= 2000
  • s 中只有小写英文字母和括号
  • 我们确保所有括号都是成对出现的

Runtime: 8 ms
Memory Usage: 20.9 MB
 1 class Solution {
 2     func reverseParentheses(_ s: String) -> String {
 3         var s1:[String] = [String]()
 4         var s2:[Character] = [Character]()
 5         var sb:String = String()
 6         var s = Array(s)
 7         for i in 0..<s.count
 8         {
 9             let c:Character = s[i]
10             if c == "("
11             {
12                 s2.append(c)
13                 s1.append(sb)
14                 sb = String()
15             }
16             else if c == ")"
17             {
18                 s2.removeLast()
19                 sb = String(sb.reversed())
20                 if !s1.isEmpty
21                 {
22                     sb.insert(contentsOf: s1.removeLast(), at:sb.startIndex)
23                 }
24             }
25             else
26             {
27                 sb.append(c)
28             }
29         }
30         return sb
31     }
32 }

 

posted @ 2019-09-15 12:05  为敢技术  阅读(649)  评论(0编辑  收藏  举报