1 笔试题目
1.1 题目描述
给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应包含任何括号。
1.2示例
示例 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"
1.3 提示:
0 <= s.length <= 2000
s 中只有小写英文字母和括号
我们确保所有括号都是成对出现的
2 问题解决
2.1 题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses
2.2 思路分析
2.3 代码示例
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc =new Scanner(System.in);
String s = sc.next();
Solution solution = new Solution();
String answer =solution.reverseParenthese(s);
System.out.println(answer);
}
}
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 reverseParenthese(String s){
Stack<Integer> stack =new Stack<>();
StringBuilder sb =new StringBuilder();
char[] arr= s.toCharArray();
for(int i= 0; i<arr.length;i++){
if(arr[i]=='('){
stack.push(i);
}else 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();
}
}
2.4 小结反思
看某个面经描述,还有一面手撕代码就是要求写这个