--- title: 394. Decode String tags: Stack description: share source code. --- # 394. Decode String ```java // used Stack to find [ as a starting point and ] as a end point class Solution { public String decodeString(String s) { Stack<String> sk = new Stack<>(); for(char ch : s.toCharArray()){ // start with [ if(ch == ']'){ StringBuilder sb = new StringBuilder(); // if not reach ] continue to pop while(!sk.peek().equals("[")){ // insert front sb.insert(0, sk.pop()); } sk.pop(); // [ int num = 0; int base = 1; // caculate the times to add the repeated word while(!sk.isEmpty() && Character.isDigit(sk.peek().charAt(0))){ num = num + (sk.pop().charAt(0) - '0')* base; base *=10; } for(int i = 0; i < num; i++){ sk.push(sb.toString()); } }else{ sk.push(ch + ""); } } StringBuilder output = new StringBuilder(); while(!sk.isEmpty()){ output.insert(0, sk.pop()); } return output.toString(); } } ```