题目:
题解
一, JS API
Math.abs(); // 获取绝对值
String.prototype.charCodeAt() // 获取字符 ASCII 码值
字符的 ASCII 码值
'a'.charCodeAt() //97
'A'.charCodeAt() //65
'b'.charCodeAt() //98
'B'.charCodeAt() //66
∵ 同一小写字母与大写字母相减 为 ±32 ∴ 当s[i]与s[i-1]是同一字母,且只有一个是大写时:
Math.abs(s[i].charCodeAt()-s[i-1].charCodeAt())===32
队列入栈
var makeGood = function (str) {
// 队列 q 存输入,栈 s 存输出,都用数组表示
let q = str.split(''),s = [];
// 迭代队列
while (q.length) {
// 出队字符
let curS = q.shift()
// 出队字符ASCII
let curV = curS.charCodeAt()
// 栈尾字符ASCII
let preV = s[s.length - 1] && s[s.length - 1].charCodeAt()
// 如果出队字符与栈尾字符 符合题意需要删除的条件
if (preV && Math.abs(curV - preV) === 32) {
// 出栈
s.pop()
} else {
// 入栈
s.push(curS)
}
}
// 输出
return s.join('')
}