Skip to content

Instantly share code, notes, and snippets.

@wangziling
Last active September 19, 2018 08:08
Show Gist options
  • Save wangziling/34618056a3b99500b02d50776f9818a7 to your computer and use it in GitHub Desktop.
Save wangziling/34618056a3b99500b02d50776f9818a7 to your computer and use it in GitHub Desktop.
从一个字符串中,找出最长的对称字符串。即 xyzazyx 或者 xyzzyx。
// 测试字符串
const stringArray = 'dadasdadawqfsdfaabbabcdedcbabbasadada13dfasafafa'.split(
'');
// 测试字符串倒转
const stringArrayReverse = stringArray.slice().reverse();
const stringArrayReverseJoin = stringArrayReverse.join('');
// 最终结果
let resultString = '';
// 统计计算次数
let calcNum = 0;
const judgeFunc = num => {
return stringArray.every((v, i, _) => {
if (i + num > _.length) return false;
calcNum++;
const string = _.slice(i, i + num);
const stringJoin = string.join('');
if (
stringArrayReverseJoin.indexOf(stringJoin) !== -1 &&
resultString.length < stringJoin.length
) {
resultString = stringJoin;
}
return true;
});
};
console.time('test');
let i = stringArray.length;
for (; i > 2; i--) {
if (resultString.length > i) break;
judgeFunc(i);
}
console.log(`计算了:${calcNum}次,for 循环:${i} 次,结果为:${resultString},长度:${resultString.length}`);
console.timeEnd('test');
// 测试字符串
const stringArray = 'dadasdadawqfsdfaabbabcdedcbabbasadada13dfasafafa'.split('');
// 最终结果
let resultString = '';
// 统计计算次数
let calcNum = 0;
// 主题函数
const judgeFunc = num => {
return stringArray.every((v, i, _) => {
if (i + num > _.length) return false;
calcNum++;
const string = _.slice(i, i + num);
const stringJoin = string.join('');
const halfArray = string.slice(0, string.length / 2 >> 0);
const regExp = new RegExp(`${halfArray.join('')}.?${halfArray.reverse().join('')}`, 'g');
if (regExp.test(stringJoin) && resultString.length < stringJoin.length) {
resultString = stringJoin;
}
return true;
});
};
console.time('test');
let i = stringArray.length;
// 使用逆向,节约计算资源
for (; i > 2; i--) {
if (resultString.length > i) break;
judgeFunc(i);
}
console.log(`计算了:${calcNum}次,for 循环:${i} 次,结果为:${resultString},长度:${resultString.length}`);
console.timeEnd('test');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment