1 笔试题目

1.1 题目描述

给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应包含任何括号。

1.2示例

  1. 示例 1
  2. 输入:s = "(abcd)"
  3. 输出:"dcba"
  4. 示例 2
  5. 输入:s = "(u(love)i)"
  6. 输出:"iloveu"
  7. 示例 3
  8. 输入:s = "(ed(et(oc))el)"
  9. 输出:"leetcode"
  10. 示例 4
  11. 输入:s = "a(bcdefghijkl(mno)p)q"
  12. 输出:"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 代码示例

  1. import java.util.*;
  2. public class Main {
  3. public static void main(String[] args){
  4. Scanner sc =new Scanner(System.in);
  5. String s = sc.next();
  6. Solution solution = new Solution();
  7. String answer =solution.reverseParenthese(s);
  8. System.out.println(answer);
  9. }
  10. }
  11. class Solution{
  12. public void reverse(char[]a,int l,int r){
  13. while(r>l){
  14. char temp=a[l];
  15. a[l]=a[r];
  16. a[r]=temp;
  17. r--;
  18. l++;
  19. }
  20. }
  21. public String reverseParenthese(String s){
  22. Stack<Integer> stack =new Stack<>();
  23. StringBuilder sb =new StringBuilder();
  24. char[] arr= s.toCharArray();
  25. for(int i= 0; i<arr.length;i++){
  26. if(arr[i]=='('){
  27. stack.push(i);
  28. }else if(arr[i]==')'){
  29. reverse(arr,stack.pop()+1,i-1);
  30. }
  31. }
  32. for(int i=0;i<arr.length;i++){
  33. if(arr[i]!='(' && arr[i]!=')' ){
  34. sb.append(arr[i]);
  35. }
  36. }
  37. return sb.toString();
  38. }
  39. }

2.4 小结反思

看某个面经描述,还有一面手撕代码就是要求写这个