Skip to main content

Reverse Only Letters

Problem statement

Given a string s, reverse the string according to the following rules:

  • All the characters that are not English letters remain in the same position.
  • All the English letters (lowercase or uppercase) should be reversed.

Return s after reversing it.

Example 1:

Input: s = "ab-cd"Output: "dc-ba"

Example 2:

Input: s = "a-bC-dEf-ghIj"Output: "j-Ih-gfE-dCba"

Example 3:

Input: s = "Test1ng-Leet=code-Q!"Output: "Qedo1ct-eeLg=ntse-T!"

Constraints:

  • 1 <= s.length <= 100
  • s consists of characters with ASCII values in the range [33, 122].
  • s does not contain '"' or '\'.

My solution

/**
* @param {string} s
* @return {string}
*/
var reverseOnlyLetters = function(s) {
const sArr = s.split("")
let left = 0;
let right = sArr.length - 1;
const regex = /[a-zA-Z]/

// console.log(sArr[left].match(regex))


while (left <= right) {
const leftChar = sArr[left]
const rightChar = sArr[right];

if (!leftChar.match(regex)) {
left++
} else if (!rightChar.match(regex)) {
right--
} else {
[sArr[right], sArr[left]] = [sArr[left], sArr[right]]
left++;
right--
}
}

return sArr.join("")
};