Medium
You are given a string s consisting of lowercase English letters and the special characters: *, #, and %.
Build a new string result by processing s according to the following rules from left to right:
result.'*' removes the last character from result, if it exists.'#' duplicates the current result and appends it to itself.'%' reverses the current result.Return the final string result after processing all characters in s.
Example 1:
Input: s = “a#b%*”
Output: “ba”
Explanation:
| i | s[i] | Operation | Current result |
|---|---|---|---|
| 0 | 'a' |
Append 'a' |
"a" |
| 1 | '#' |
Duplicate result |
"aa" |
| 2 | 'b' |
Append 'b' |
"aab" |
| 3 | '%' |
Reverse result |
"baa" |
| 4 | '*' |
Remove the last character | "ba" |
Thus, the final result is "ba".
Example 2:
Input: s = “z*#”
Output: “”
Explanation:
| i | s[i] | Operation | Current result |
|---|---|---|---|
| 0 | 'z' |
Append 'z' |
"z" |
| 1 | '*' |
Remove the last character | "" |
| 2 | '#' |
Duplicate the string | "" |
Thus, the final result is "".
Constraints:
1 <= s.length <= 20s consists of only lowercase English letters and special characters *, #, and %.class Solution {
fun processStr(s: String): String {
val res = StringBuilder()
for (c in s.toCharArray()) {
if (c != '*' && c != '#' && c != '%') {
res.append(c)
} else if (c == '#') {
res.append(res)
} else if (c == '%') {
res.reverse()
} else {
if (res.isNotEmpty()) {
res.deleteCharAt(res.length - 1)
}
}
}
return res.toString()
}
}