2 minute read

Given a 0-indexed string word and a character ch, reverse the segment of word that starts at index 0 and ends at the index of the first occurrence of ch (inclusive). If the character ch does not exist in word, do nothing.

For example, if word = “abcdefd” and ch = “d”, then you should reverse the segment that starts at 0 and ends at 3 (inclusive). The resulting string will be “dcbaefd”. Return the resulting string.

Example 1:

Input: word = “abcdefd”, ch = “d” Output: “dcbaefd” Explanation: The first occurrence of “d” is at index 3. Reverse the part of word from 0 to 3 (inclusive), the resulting string is “dcbaefd”. Example 2:

Input: word = “xyxzxe”, ch = “z” Output: “zxyxxe” Explanation: The first and only occurrence of “z” is at index 3. Reverse the part of word from 0 to 3 (inclusive), the resulting string is “zxyxxe”. Example 3:

Input: word = “abcd”, ch = “z” Output: “abcd” Explanation: “z” does not exist in word. You should not do any reverse operation, the resulting string is “abcd”.

Constraints:

1 <= word.length <= 250 word consists of lowercase English letters. ch is a lowercase English letter.

/**
 * @param {string} word - The input word
 * @param {character} ch - The character to find and reverse the prefix up to
 * @return {string} - The word with the prefix reversed up to the first occurrence of ch
 */
var reversePrefix = function (word, ch) {
  // Convert the input word into an array of characters
  let result = word.split("");

  // Find the index of the specified character in the array
  let indexOfCh = result.indexOf(ch);

  // Initialize two pointers for reversing the prefix
  let left = 0;
  let right = indexOfCh;

  // Reverse the portion of the array before and including the first occurrence of ch
  while (left < right) {
    // Swap characters at left and right positions
    let temp = result[left];
    result[left] = result[right];
    result[right] = temp;

    // Move the pointers towards the center
    left++;
    right--;
  }

  // Join the array back into a string and return the result
  return result.join("");
};

Time Complexity: The time complexity of this algorithm is O(n), where n is the length of the input word. The algorithm iterates through the array once, and the reversing process takes linear time.

Space Complexity: The space complexity is O(n), as the algorithm uses an array of characters (result) with the same length as the input word.

Leave a comment