publicclassZiFuChuanJieMa{publicstaticvoidmain(String[] args){
Solution6 a =newSolution6();
System.out.println(a.decodeString("3[ab]"));}}classSolution6{public String decodeString(String s){char[] a = s.toCharArray();
Stack<Integer> i1 =newStack<Integer>();
Stack<String> s1 =newStack<String>();int num =0;for(int i =0;i < s.length();i++){if(Character.isDigit(a[i])){
num = num *10+ Integer.parseInt(String.valueOf(a[i]));}elseif(a[i]=='['){
i1.push(num);
s1.push(String.valueOf(a[i]));
num =0;}elseif(Character.isLetter(a[i])){
s1.push(String.valueOf(a[i]));}else{int b = i1.pop();
String x =newString();while(!s1.peek().equals("[")){
x = s1.pop()+ x;}
s1.pop();
String c =newString();while(b >0){
c += x;
b--;}
s1.push(c);}}
String d =newString();while(!s1.isEmpty()){
d = s1.pop()+ d;}return d;}}
方法二 : 递归
package com.leetcode;import java.util.Arrays;import java.util.Stack;publicclassZiFuChuanJieMa{publicstaticvoidmain(String[] args){
Solution6 a =newSolution6();
System.out.println(a.decodeString("3[ab]"));}}classSolution6{public String decodeString(String s){returndfs(s,0)[0];}private String[]dfs(String s,int i){
StringBuilder res =newStringBuilder();int multi =0;while(i < s.length()){if(s.charAt(i)>='0'&& s.charAt(i)<='9')
multi = multi *10+ Integer.parseInt(String.valueOf(s.charAt(i)));elseif(s.charAt(i)=='['){
String[] tmp =dfs(s, i +1);
i = Integer.parseInt(tmp[0]);//一次走完括号 i直接变为 ] 的下标while(multi >0){
res.append(tmp[1]);
multi--;}}elseif(s.charAt(i)==']')returnnewString[]{ String.valueOf(i), res.toString()};//[]内部的else//是字母的情况
res.append(String.valueOf(s.charAt(i)));//加入字符串 a ab
i++;}returnnewString[]{ res.toString()};//while走完后的}}