Skip to content

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 from result, if it exists.
  • A '#' duplicates the current result and appends it to itself.
  • A '%' reverses the current result.

Return the final string result after processing all characters in s.

 

Example 1:

Input: s = "a#b%*"

Output: "ba"

Explanation:

is[i]OperationCurrent 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:

is[i]OperationCurrent result
0'z'Append 'z'"z"
1'*'Remove the last character""
2'#'Duplicate the string""

Thus, the final result is "".

 

Constraints:

  • 1 <= s.length <= 20
  • s consists 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('');
};

Released under the MIT license