给出一个字符串 s(仅含有小写英文字母和括号)。app
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。ui
注意,您的结果中 不该 包含任何括号。code
示例 1:递归
输入:s = "(abcd)"
输出:"dcba"
示例 2:leetcode
输入:s = "(u(love)i)"
输出:"iloveu"
示例 3:字符串
输入:s = "(ed(et(oc))el)"
输出:"leetcode"
示例 4:io
输入:s = "a(bcdefghijkl(mno)p)q"
输出:"apmnolkjihgfedcbq"class
提示:英文
0 <= s.length <= 2000
s 中只有小写英文字母和括号
咱们确保全部括号都是成对出现的while
解:递归
利用stack来存储' ( '的角标位置,遇到‘(’则将其角标压入栈;遇到‘)’则将栈顶的角标弹出,并将该角标与‘ )’之间的字符串反转
class Solution {
public String reverseParentheses(String s) {
Stack<Integer> stack = new Stack<>();
StringBuilder st = new StringBuilder();
int num = s.length();
char[] arr = s.toCharArray();
for(int i = 0; i < num; i++){
if(arr[i] == '('){
stack.push(i);
}else if(arr[i] == ')'){
reverse(arr,stack.pop() + 1, i - 1);
}
}
for(int i = 0; i < num; i++){
if(arr[i] != '(' && arr[i] != ')'){
st.append(arr[i]);
}
}
return st.toString();
}
public void reverse(char[] c, int i, int j){
while(i < j){
char temp = c[i];
c[i] = c[j];
c[j] = temp;
i++;
j--;
}
}
}