给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
示例 1:
输入:s = “(abcd)”
输出:“dcba”
示例 2:
输入:s = “(u(love)i)”
输出:“iloveu”
示例 3:
输入:s = “(ed(et(oc))el)”
输出:“leetcode”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:先用栈进行括号的匹配,遇到一对括号就反转,并将栈中的括号出栈,最后将反转的字符串的括号去除,在输出
class Solution {
public void reverse(char[]a,int l,int r){
while(r>l){
char temp=a[l];
a[l]=a[r];
a[r]=temp;
r--;
l++;
}
}
public String reverseParentheses(String s) {
StringBuilder sb=new StringBuilder();
char []arr=s.toCharArray();
Stack<Integer>stack=new Stack<>();
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]!='(')
sb.append(arr[i]);
}
return sb.toString();
}
}