当年去携程面试时,刘大师问了一个判断回文字符串(类似于 123454321)的方法,我是有备而来,刷刷就写了:
function test(str) {
return str.split('').reverse().join('') === str;
}
So easy。不过刘大师不喜欢这种 geek 范的东西,只好老老实实又写了一份循环版的……C++语言的……伪代码。还好当年不是技术面。
不过今天呢,我要尝试用第三种方法,当然必须是 javascript,来解决这个问题!
function test(str) {
const length = str.length;
const regArrCenter = length % 2 === 0 ? [] : ['.'];
const regArrLeft = ['^'];
const regArrRight = ['$'];
for (let i = 1; i <= length / 2; i++) {
regArrLeft.push('(.)');
regArrRight.unshift(`\\${i}`);
}
const regStr = regArrLeft.concat(regArrCenter, regArrRight).join('');
const reg = new RegExp(regStr);
return reg.test(str);
}
这个方法是通过回文字符串规律,构造正则表达式完成的,这个思路还是比较偏的。怎么说呢,有规律的地方就有正则。性能没考虑,估计跟循环法差不多,慢于数组操作。