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