给出一个字符串 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 中只有小写英文字母和括号
我们确保所有括号都是成对出现的
思路:遇到左括号时递归进行字符串反转即可,不仅代码简洁,也能完美解决括号嵌套的问题。
class Solution {
public String reverseParentheses(String s) {
if(s.length()<=1) return s;
StringBuilder str=new StringBuilder();
for(int i=0;i<s.length();i++) {
if(s.charAt(i)=='(') {
int j=i,bal=0;
for(;j<s.length();j++) {
if(s.charAt(j)=='(') bal++;
if(s.charAt(j)==')') bal--;
if(bal==0) break;
}
StringBuilder tmp=new StringBuilder(reverseParentheses(s.substring(i+1, j)));
for(int k=tmp.length()-1;k>=0;k--)
str.append(tmp.charAt(k));
i=j;
}
else
str.append(s.charAt(i));
}
return str.toString();
}
}