//采用递归和字符串替换的解法

public class Solution {

public String decodeString (String s) {
   int length = s.length();
   //对特殊情况进行处理,只要包含有[字符就要递归下去
    if(length==3||!s.contains("[")){
        return s;
    }
    //存放要被替换的字符串
    Stack<StringBuilder> tempStack = new Stack<>();
    StringBuilder tempString;
    //存放替换的字符串
    Stack<StringBuilder> resultStack = new Stack<>();
    //定义替换的字符串
    StringBuilder resultString;
    //定义重复的次数
    int time;
    for (int i = 0; i < length-3; i++) {
    //判断
        if(Character.isDigit(s.charAt(i))&&s.charAt(i+1)=='['&&Character.isLetter(s.charAt(i+2))){
        //获取重复的次数
            time=s.charAt(i);
            tempString = new StringBuilder();
            resultString = new StringBuilder();
            tempString.append(s, i, i+2);
            int j = i+2;
            while (Character.isLetter(s.charAt(j))){
                tempString.append(s.charAt(j));
                resultString.append(s.charAt(j));
                j++;
            }
            tempString.append(']');
            tempStack.add(tempString);
            String temp = resultString.toString();
            StringBuilder result = new StringBuilder();
            for (int k = 0; k < time-48; k++) {
                result.append(temp);
            }
            resultStack.add(result);
        }
    }
    //进行替换
    Iterator<StringBuilder> tempIterator = tempStack.iterator();
    Iterator<StringBuilder> resultIterator = resultStack.iterator();
    while (tempIterator.hasNext()) {
        s=s.replace(tempIterator.next(), resultIterator.next());
    }
    //递归替换
    return decodeString(s);
}

}