Advertisement
lifeiteng

394. Decode String

Sep 12th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.87 KB | None | 0 0
  1. class Solution {
  2.     public String decodeString(String s) {
  3.         int k = 0;
  4.         StringBuilder sb = new StringBuilder();
  5.         Stack<String> stack = new Stack<>();
  6.         Stack<Integer> vals = new Stack<>();
  7.         for(char ch : s.toCharArray())
  8.         {
  9.             if('0' <= ch && ch <= '9') k = k * 10 + ch - '0';
  10.             else if(ch == '[')
  11.             {
  12.                 stack.push(sb.toString());
  13.                 sb = new StringBuilder();
  14.                 vals.push(k);
  15.                 k = 0;
  16.             }
  17.             else if(ch == ']')
  18.             {
  19.                 // there is another number in front of[, and currently k = 0
  20.                 String str = sb.toString(); // current string
  21.                 int count = vals.pop();
  22.                 sb = new StringBuilder(stack.pop());
  23.                 while(count-- > 0) sb.append(str);
  24.             }
  25.             else sb.append(ch);
  26.         }
  27.         return sb.toString();
  28.     }
  29.     public String decodeString1(String s) {
  30.         if(s.equals("")) return s;
  31.         int k = 0, n = s.length();
  32.         StringBuilder sb = new StringBuilder();
  33.         for(int i = 0; i < n; i++)
  34.         {
  35.             char ch = s.charAt(i);
  36.             if(ch == '[')
  37.             {
  38.                 int bracket = 1, j = i;
  39.                 while(bracket > 0)
  40.                 {
  41.                     j++;
  42.                     if(s.charAt(j) == '[') bracket++;
  43.                     if(s.charAt(j) == ']') bracket--;
  44.                 }
  45.                 // now i points to ]
  46.                 String dec = decodeString(s.substring(i + 1, j));
  47.                 while(k-- > 0) sb.append(dec);
  48.                 sb.append(decodeString(s.substring(j + 1)));
  49.                 break;
  50.             }
  51.             if('0' <= ch && ch <= '9') k = k * 10 + ch - '0';
  52.             else sb.append(ch);
  53.         }
  54.         return sb.toString();
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement