Given a string S
, return the “reversed” string where all characters that are not a letter stay in the same place, and all letters reverse their positions.
Example 1:
Input: "ab-cd" Output: "dc-ba"
Example 2:
Input: "a-bC-dEf-ghIj" Output: "j-Ih-gfE-dCba"
Example 3:
Input: "Test1ng-Leet=code-Q!" Output: "Qedo1ct-eeLg=ntse-T!"
Note:
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S
doesn’t contain\
or"
Idea:
Two pointers
Solution:
/**
* @param {string} S
* @return {string}
*/
var reverseOnlyLetters = function(S) {
let l = 0;
let r = S.length - 1;
let arr = S.split('');
while (l < r) {
if (!isAlpha(arr[l])) l++;
if (!isAlpha(arr[r])) r--;
if (isAlpha(arr[l]) && isAlpha(arr[r])) {
// swap
[arr[l], arr[r]] = [arr[r], arr[l]];
l++
r--;
}
}
return arr.join('');
};
var isAlpha = (c) => /[a-zA-Z]/.test(c);