什么是回文?
Palindromes称之为回文,在中文当中简单来说是指倒着念和顺着念都是相同的,前后对称那么就属于回文;例如:「上海自来水来自海上」。
在英文文当中是指正着看和反着看都相同的单词,例如:「madam」。对于数字,又称为回文数,是指一个像“16461”这样的对称的数。
综上所述,我们得出回文的规则:
- 单个和零个字符都是回文,例如:「1」、「2」、「3」…等等
- 如果字符串的第一个字符和最后一个字符相同,并且除了两个字符以外剩余的其他字符也是一个回文的话,字符串是一个回文,例如:「16461」、「level」、「noon」、「nonon」…等等
如何用JavaScript
来实现回文?
现给出测试用例:
checkPalindrome('race car')
返回true
checkPalindrome('not a palindrome')
返回false
checkPalindrome('A man, a plan, a canal. Panama')
返回true
checkPalindrome('never odd or even')
返回true
checkPalindrome('nope')
返回false
checkPalindrome('almostomla')
返回false
checkPalindrome('My age is 0, 0 si ega ym.')
返回true
checkPalindrome('1 eye for of 1 eye.')
返回false
checkPalindrome('0_0 (: /-\ :) 0–0')
返回true
checkPalindrome('我爱妈妈,妈妈爱我')
返回true
方法一
reverse()
是什么?
在MDN中的介绍:
Array.prototype.reverse()
方法将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个。该方法会改变原数组。
简单来说就是可以将数组的元素位置顺序颠倒,并重新返回新的数组
具体实现思路:
- 利用正则
/[\W_]/g
(或者/[^A-Za-z0-9_]/g
)删除不必要的字符- 通过
toLowerCase()
将传入的字符串转换为小写字母- 利用
split()
方法将string
对象分割成字符串数组,然后用reverse()
方法将数组中的元素进行倒序,并返回该数组(会改变原来的数组),最后join()
方法将这个数组的所有元素连接成一个字符串- 将返回的这个字符串再与原字符串进行比较是否完全相等
解释一下这里的正则表达式规则:
\W
:匹配一个非单字字符- 等价于
[^A-Za-z0-9_]
那么\W
的意思就是:
[^A-Z]
匹配非26个大写字母中的任意一个[^a-z]
匹配非26个小写中的任意一个[^0-9]
匹配非0到9中的任意一个数字[^_]
匹配非下划线
主要会用到的正则表达式规则有:
1 | /[^A-Za-z0–9_]/g |
具体代码如下:
1 | function checkPalindrome (str) { |
也可以写成:
1 | function checkPalindrome(str) { |
方法二
使用for
循环来处理
1 |
递归实现
1 | function checkPalindrome(text) { |