CCCPaste

3dfc452238a06

class Solution {
    int ptr = 0; 
    
    public String decodeString(String s) {
        return helper(s.toCharArray());
    }
    
    public String helper(char[] sArr) {
        int multiplier = 1; 
        String substring = "";
        StringBuilder sb = new StringBuilder(); 
        while(ptr < sArr.length) {
            char c = sArr[ptr];
            if(Character.isDigit(c)) {
                multiplier = parseInt(sArr);
            } else if(c == '[') {
                ptr++;
                substring = helper(sArr);
                while(multiplier > 0) {
                    sb.append(substring);
                    multiplier--; 
                }
            } else if(Character.isLetter(c)) {
                substring = parseString(sArr);
                sb.append(substring);
            } else if(c == ']') {
                String finalString = sb.toString(); 
                multiplier--; 
                while(multiplier > 0) {
                    multiplier --; 
                    sb.append(finalString);
                }
                multiplier = 1; 
                ptr++; 
                break; 
            }
        }
        return sb.toString(); 
    }
    
    public String parseString(char[] sArr) {
        StringBuilder sb = new StringBuilder();
        while(ptr < sArr.length && Character.isLetter(sArr[ptr])) {
            sb.append(sArr[ptr]);
            ptr++;
        }
        return sb.toString();
    }
    
    public int parseInt(char[] sArr) {
        StringBuilder sb = new StringBuilder();
        while(ptr < sArr.length && Character.isDigit(sArr[ptr])) {
            sb.append(sArr[ptr]);
            ptr++; 
        }
        return Integer.parseInt(sb.toString());
    }
}