1、题干
给你一个字符串 s
,根据下述规则反转字符串:
- 所有非英文字母保留在原有位置。
- 所有英文字母(小写或大写)位置反转。
返回反转后的 s
。
示例 1:
输入:s = "ab-cd"
输出:"dc-ba"
示例 2:
输入:s = "a-bC-dEf-ghIj"
输出:"j-Ih-gfE-dCba"
示例 3:
输入:s = "Test1ng-Leet=code-Q!"
输出:"Qedo1ct-eeLg=ntse-T!"
提示
1 <= s.length <= 100
s
仅由 ASCII 值在范围[33, 122]
的字符组成s
不含'\"'
或'\\'
2、解题思路
双指针遍历字符串,左右都是字母时交换位置
3、代码
var reverseOnlyLetters = function (s) {
s = [...s];
for (let l = 0, r = s.length - 1; l < r; l++, r--) {
while (l < r && !(/[a-z]/i.test(s[l]))) l++;
while (l < r && !(/[a-z]/i.test(s[r]))) r--;
[s[l], s[r]] = [s[r], s[l]];
}
return s.join('');
};