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()); } }