Skip to content

回文检查器

所谓回文,指的是:

正反都能读通的单词、词组、数或者一系列字符的序列,例如 madam 或者 racecar。

有不同的算法可以检查一个词组或字符串是否为回文。最简单的方式是将字符串反向排列并检查它与原来的字符是否相同。如果两者相同,那么它就是一个回文。我们也可以用栈来完成,但是利用数据结构来解决这个问题的话,那还是双端队列最简单、最合适。

代码实现

const Deque = require('./Deque.js')
function isPalindrome(str) {
// 防御性处理
if (str === undefined || str === null || str.length === 0) {
return false
}
// 判断该字符串是否是回文字符串
const deque = new Deque() // 先创建一个双端队列
// 将字符串全部转为小写,并且去除了空格
const lowerStr = str.toLocaleLowerCase().split(' ').join('')
let isEuqal = true // 假设是回文字符串
let firstChar = null // 存储前面的字符
let lastChar = null // 存储后面的字符
// 将字符串的每一位入队
for (let i = 0; i < lowerStr.length; i++) {
deque.addBack(lowerStr.charAt(i))
}
while (deque.size() > 1 && isEuqal) {
// 从双端队列的队首取一个字符
firstChar = deque.removeFront()
// 从双端队列的队尾取一个字符
lastChar = deque.removeBack()
if (firstChar !== lastChar) {
isEuqal = false
}
}
return isEuqal
}