Leetcode 125:验证回文数 细节问题

123 阅读2分钟

今天哈士奇写了一个验证回文数的问题,虽然原本题目需要哈士奇用双指针写,但是由于字符串操作实在太香,哈士奇还是没忍住用了字符串的方法写,这次和大家分享一下这道题的细节问题

题目内容是这样的

image.png

哈士奇的回答是这样的

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    const alphanumeric = s.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
    const reversed = alphanumeric.split('').reverse().join('');
    return alphanumeric === reversed;
};

这里面总共用了五个方法

replace()、toLowerCase()、split()、reverse()、join()

给大家依次讲讲这些方法的作用

replace()

replace(/[^a-zA-Z0-9]/g, '')使用了正则表达式的字面量的写法/[^a-zA-Z0-9]/代表了大写字母,小写字母和数字三种字符,满足回文数字母和数字的要求,加上了一个g代表着匹配字符串里面所有符合要求的字母。换言之,如果大家不加上g,那么当匹配到第一个符合要求的字符以后,就会停止寻找。

后面的''代表着如果字符不符合前面的要求,那么就使用''内的内容进行替换,请大家记住,''的里面一定要写,否则不存在于前面的内容默认就会将其替换为undefined

image.png

大家看看这个部分' ' ',' ':'这几个不在我们范围的里面的自动被输出为undefined

toLowerCase()

toLowerCase()方法就很容易理解,它代表着默认将大写字母变为小写

s=s.replace(/[^a-zA-Z0-9]/g,'')

上面代码的结果是这样的

image.png

加上toLowerCase()就自动变为小写

s=s.replace(/[^a-zA-Z0-9]/g,'').toLowerCase()

image.png

split()

这是一个分割方法,能把字符串按照方法内给予的方式进行分割,并且返回以分割的字符或字符串组成的数组 例如split('')代表每个字符都需要隔开,split(' ')代表以空格为分割方式隔开,split(':')代表以:为分割方式进行分割 例如 ("hello:world:nihao").split(":")就会被分割为["hello","world","nihao"]

在这里我们使用这个方法的目的在于将字符串分割为单个字符,方便我们在后面进行字符串的颠倒的操作

s=s.replace(/[^a-zA-Z0-9]/g,'').toLowerCase().split()

image.png

reverse()

这是一个颠倒数组的操作,会自动将数组的最后一位替换为第一位,以此类推,最后返回一个数组

s=s.replace(/[^a-zA-Z0-9]/g,'').toLowerCase().split().reverse()

image.png

join()

join()方法可以将数组中的所有的元素放入到一个字符串内,并以方法中指定的字符进行分割,并返回

s=s.replace(/[^a-zA-Z0-9]/g,'').toLowerCase().split().reverse()join('')

不知道哈士奇的讲解对于大家的对这几个方法是否有更深入的了解呢?期待下次与大家相见哦