394. Decode String
Given an encoded string, return its decoded string.
The encoding rule is: k[encoded_string]
, where the encoded_string
inside the square brackets is being repeated exactly k
times. Note that k
is guaranteed to be a positive integer.
You may assume that the input string is always valid; there are no extra white spaces, square brackets are well-formed, etc. Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k
. For example, there will not be input like 3a
or 2[4]
.
The test cases are generated so that the length of the output will never exceed 105
.
Example 1:
Example 2:
Example 3:
Solution:
class Solution {
public String decodeString(String s) {
/*
0 1 2 3 4 5 6 7 8
3 [ a ] 2 [ b c ]
i
countStack: [ 2
resultStack: [ "aaa"
currentString: "bc"
k = 0 = 0 * 10 + (3 -'0') = 3
k = 0 * 10 + (2 -'0') =2
k = 0
2
aaabcbc
*/
Stack<Integer> countStack = new Stack<>();
Stack<StringBuilder> resultStack = new Stack<>();
StringBuilder currentString = new StringBuilder();
int k = 0;
for (char ch : s.toCharArray()){
if (Character.isDigit(ch)){
// If it's a digit, build the number (k can be more than one digit long)
k = k * 10 + (ch - '0');
}else if (ch == '['){
// Push the current k and currentString into their respective stacks
countStack.push(k);
resultStack.push(currentString);
// Reset k and currentString for the new section inside the brackets
k = 0;
currentString = new StringBuilder();
}else if (ch == ']'){
// Pop the last count and last string from the stacks
int repeatTimes = countStack.pop();
StringBuilder decodedString = resultStack.pop();
// Append the currentString repeated 'repeatTimes' to the decodedString
for (int i = 0; i < repeatTimes; i++){
decodedString.append(currentString);
}
// Update teh currentString to the decoded string
currentString = decodedString;
}else{
// If it's a character, just add it to the currentString
currentString.append(ch);
}
}
return currentString.toString();
}
}
// TC: O(kn)
// SC:
This problem is hard for me.
Solution process: use an example to follow step then you will understand a litte
And then write 3 times++
Record the video to express.