思路:
使用栈记录左括号的位置,每遇到一个右括号,就取出栈里最后一个左括号,反转中间部分
class Solution:
def reverseParentheses(self, s: str) -> str:
def reverse(arr,left,right):
while left<right:
arr[left],arr[right]=arr[right],arr[left]
right-=1
left+=1
arr=list(s)
stack=[]
res=""
for i in range(len(arr)):
if arr[i]=="(":
stack.append(i)
if arr[i]==")":
reverse(arr,stack.pop()+1,i-1)
for c in arr:
if c!="(" and c!=")":
res+=c
return res
class Solution {
public String reverseParentheses(String s) {
Stack<Integer> stack = new Stack<>();
StringBuilder res = new StringBuilder();
char[] arr = s.toCharArray();
for (int i=0;i<arr.length;i++ ){
if (arr[i]=='('){
stack.push(i);
}
if(arr[i]==')'){
reverse(arr,stack.pop()+1,i-1);
}
}
for (int i=0;i<arr.length;i++ ){
if(arr[i]!='(' && arr[i]!=')'){
res.append(arr[i]);
}
}
return res.toString();
}
public void reverse(char[] arr,int left,int right){
while(left<right){
char temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
right--;
left++;
}
}
}