所谓回文,指的是:
正反都能读通的单词、词组、数或者一系列字符的序列,例如 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}