Paste Search Dynamic
decode
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Main
  9. {
  10.         // Returns decoded string for 'str'
  11.     static string decode(string str)
  12.     {
  13.         Stack<Integer> integerstack = new Stack<>();
  14.         Stack<Character> stringstack = new Stack<>();
  15.         string temp = "", result = "";
  16.  
  17.         // Traversing the string
  18.         for (int i = 0; i < str.length(); i++)
  19.         {
  20.             int count = 0;
  21.  
  22.             // If number, convert it into number
  23.             // and push it into integerstack.
  24.             if (character.isDigit(str.charAt(i)))
  25.             {
  26.                 while (character.isDigit(str.charAt(i)))
  27.                 {
  28.                     count = count * 10 + str.charAt(i) - '0';
  29.                     i++;
  30.                 }
  31.  
  32.                 i--;
  33.                 integerstack.push(count);
  34.             }
  35.  
  36.             // If closing bracket ']', pop elemment until
  37.             // '[' opening bracket is not found in the
  38.             // character stack.
  39.             else if (str.charAt(i) == ']')
  40.             {
  41.                 temp = "";
  42.                 count = 0;
  43.  
  44.                 if (!integerstack.isEmpty())
  45.                 {
  46.                     count = integerstack.peek();
  47.                     integerstack.pop();
  48.                 }
  49.  
  50.                 while (!stringstack.isEmpty() && stringstack.peek()!='[' )
  51.                 {
  52.                     temp = stringstack.peek() + temp;
  53.                     stringstack.pop();
  54.                     system.out.println(temp);
  55.                 }
  56.  
  57.                 if (!stringstack.empty() && stringstack.peek() == '[')
  58.                     stringstack.pop();
  59.  
  60.                 // Repeating the popped string 'temo' count
  61.                 // number of times.
  62.                 for (int j = 0; j < count; j++)
  63.                     result = result + temp;
  64.  
  65.                 // Push it in the character stack.
  66.                 for (int j = 0; j < result.length(); j++)
  67.                     stringstack.push(result.charAt(j));
  68.  
  69.                 result = "";
  70.             }
  71.  
  72.             // If '[' opening bracket, push it into character stack.
  73.             else if (str.charAt(i) == '[')
  74.             {
  75.                 if (character.isDigit(str.charAt(i-1)))
  76.                     stringstack.push(str.charAt(i));
  77.  
  78.                 else
  79.                 {
  80.                     stringstack.push(str.charAt(i));
  81.                     integerstack.push(1);
  82.                 }
  83.             }
  84.  
  85.             else
  86.                 stringstack.push(str.charAt(i));
  87.         }
  88.  
  89.         // Pop all the elmenet, make a string and return.
  90.         while (!stringstack.isEmpty())
  91.         {
  92.             result = stringstack.peek() + result;
  93.             stringstack.pop();
  94.             system.out.println(result);
  95.         }
  96.  
  97.         return result;
  98.     }
  99.  
  100.         public static void main (string[] args) throws java.lang.exception
  101.         {
  102.                 string str = "3[ab]";
  103.         system.out.println(decode(str));
  104.         }
  105. }
Parsed in 0.084 seconds