仅仅反转字母

给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。

  • 输入:s = “ab-cd”

  • 输出:”dc-ba”

  • 输入:s = “a-bC-dEf-ghIj”

  • 输出:”j-Ih-gfE-dCba”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var reverseOnlyLetters = function(s) {
const min1 = 'a', max1 = 'z';
const min2 = 'A', max2 = 'Z';
const arr = s.split('');
const queue = [];
// 判断字符是否为字母
const isAlp = (arr,i) => {return arr[i] >= min1 && arr[i] <= max1 || arr[i] >= min2 && arr[i] <= max2};
// 循环入栈
for(let i = 0; i < arr.length; i++){
// 如果arr[i]为字母,入栈
if(isAlp(arr,i)) queue.push(arr[i]);
}
// 循环出栈
for(let i = 0; i < arr.length; i++){
// 如果arr[i]为字母,用栈顶元素代替
if(isAlp(arr,i)) arr[i] = queue.pop();
}
return arr.join('');
};