import java.util.Scanner; import java.util.Stack; public class Main {     public static void main(String[] args )     {         Scanner sr =new Scanner(System.in);         String str=sr.next();         sr.close();         StringBuffer sb=new StringBuffer(openString(str));         System.out.println(sb.reverse());            }     public static String openString(String str) {          if(!str.matches(".*\\d+.*")) {              return str;          }         Stack stack=new Stack();         int left=0;         int right=0;                    //左右指针分别指向每次处理最里面一层的字符串         for(int i=0;i<str.length();i++)         {             char c=str.charAt(i);             if(!(c==')'||c==']'||c=='}'))              {                 stack.push(c);             }             else {                 right=i;                 break;             } }                                        //遍历先找到最前面的")"、"]"、"}" ,在此之前全部存栈         left=right;         char sc=(char) stack.pop();              left--;         String s="";         while(!(sc=='('||sc=='['||sc=='{'))  //弹栈找到最近的"("、"["、"{",在找到之前都是叠加的,全部存储         {             s=sc+s;             sc=(char)stack.pop();             left--;         }         sc=(char) stack.pop();         int count=(int)sc-(int)'0';          //取出数字,叠加展开         left--;         String ss="";         while(count>0) {             ss+=s;             count--;         }         str=str.substring(0,left)+ss+str.substring(right+1,str.length());  //替换原数组中的处理部分,递归。         return openString(str);     } }
点赞 评论
牛客网
牛客企业服务