3612. Process String with Special Operations I
Description
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:
- If the letter is a lowercase English letter append it to
result. - A
'*'removes the last character fromresult, if it exists. - A
'#'duplicates the currentresultand appends it to itself. - A
'%'reverses the currentresult.
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 <= 20sconsists of only lowercase English letters and special characters*,#, and%.
Solutions
Solution: Simulation
- Time complexity: O(n)
- Space complexity: O(n)
JavaScript
js
/**
* @param {string} s
* @return {string}
*/
const processStr = function (s) {
const REMOVE = '*';
const DUPLICATE = '#';
const REVERSE = '%';
const operationMap = {
[REMOVE]: arr => {
arr.pop();
return arr;
},
[DUPLICATE]: arr => {
arr.push(...arr);
return arr;
},
[REVERSE]: arr => arr.toReversed(),
default: (arr, char) => {
arr.push(char);
return arr;
},
};
let current = [];
for (const char of s) {
const operation = operationMap[char] ?? operationMap.default;
current = operation(current, char);
}
return current.join('');
};