LeetCode_1190.反转每对括号间的子串

给出一个字符串 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 中只有小写英文字母和括号
  • 我们确保所有括号都是成对出现的

C#代码

public class Solution {
    public string ReverseParentheses(string str) {
        Stack<int> stack = new Stack<int>();
        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == '(')
            {
                stack.Push(i);
            }
            else if (str[i] == ')')
            {
                var startIndex = stack.Pop();
                string mid = str.Substring(startIndex + 1, i - 1 - startIndex);
                mid = new string(mid.Reverse().ToArray());

                string startStr = str.Substring(0, startIndex);
                string endStr = str.Substring(i + 1, str.Length - 1 - i);

                str = startStr + "_" + mid + "_" + endStr;
            }
        }
        return new string(str.Where(p=>p!='_').ToArray());        
    }
}
posted @ 2021-01-06 18:20  付旭洋  阅读(85)  评论(0编辑  收藏  举报