1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| import java.util.Stack;
public class DecodeString {
public String decodeString(String s) { Stack<String> stringStack = new Stack<>(); Stack<Integer> numStack = new Stack<>(); String temp = "";
for (int i=0; i<s.length(); i++){ if (Character.isDigit(s.charAt(i))){ int count = s.charAt(i) - '0'; while(Character.isDigit(s.charAt(i+1))){ count = count*10+ s.charAt(i) - '0'; i = i+1; } numStack.push(count); }
else if (s.charAt(i) == '['){ stringStack.push(temp); temp = ""; }
else if (s.charAt(i) == ']'){ StringBuilder sb = new StringBuilder(stringStack.pop()); int repeatTime = numStack.pop(); for (int j=0; j<repeatTime; j++){ sb.append(temp); } temp = sb.toString(); } else{ temp = temp + s.charAt(i); } } return temp; } }
|