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());
}
}