DEV Community

Prashant Mishra
Prashant Mishra

Posted on

Decode String

Problem

class Solution {
    public String decodeString(String s) {
    StringBuilder sb = new StringBuilder();
        int i = s.length()-1;
        StringBuilder n= new StringBuilder();
        Stack<Character> stack = new Stack<>();
        while(i>=0){
            while(i>=0 && Character.isDigit(s.charAt(i))){
                n.insert(0,s.charAt(i));
                i--;
            }
            if(n.length()!=0){
                doOp(Integer.parseInt(n.toString()), stack);
                n.setLength(0);
            }
            if(i>=0 && !Character.isDigit(s.charAt(i))){
                stack.push(s.charAt(i));
            }
            i--;
        }
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }
        return sb.toString();
    }
    public static void doOp(int c, Stack<Character> stack){
        stack.pop(); //pop the [ 
        StringBuilder sb = new StringBuilder();
        while(stack.peek()!=']'){
            sb.append(stack.pop());
        }
        if(!stack.isEmpty()){
            stack.pop();//pop the ] 
        }
        char ch[] = sb.toString().repeat(c).toCharArray();
        for(int i =ch.length-1;i>=0;i--){
            stack.push(ch[i]);
        }
    }

}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)