Untitled
unknown
plain_text
9 months ago
1.5 kB
3
Indexable
class Solution {
public String decodeString(String s) {
Stack<Object> stack = new Stack<>(); // Single stack for both multipliers and strings
StringBuilder currentString = new StringBuilder();
int k = 0; // Current multiplier
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
// Build the multiplier (can have multiple digits)
k = k * 10 + (c - '0');
} else if (c == '[') {
// Push the current multiplier and string onto the stack
stack.push(currentString);
stack.push(k);
// Reset for the new scope
currentString = new StringBuilder();
k = 0;
} else if (c == ']') {
// Pop the multiplier and the previous string from the stack
int multiplier = (int) stack.pop();
StringBuilder previousString = (StringBuilder) stack.pop();
// Repeat the current string and append it to the previous string
for (int i = 0; i < multiplier; i++) {
previousString.append(currentString);
}
currentString = previousString;
} else {
// Append characters to the current string
currentString.append(c);
}
}
return currentString.toString();
}
}Editor is loading...
Leave a Comment