题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507
let inputStr = readline();
// 測試用例
// aaaaaabcbaadddd
// qhbrivaighqmgafhthxicdiixpefhwwefdebwczswqqdjxulhuhceqrxechddtlbbltddhcexrqechuhluxjdqqwszcwenakceymkxfqpqxctbsousrwwhooxjtcqnvb
// a
// asdf
let start = 0
let arr = inputStr[0]
let len = inputStr.length;
while (start < len - 1) {
let pre = start;
let next = start + 1;
// 双指针移动,找到相等的两个字母
for (let i = start; i < len; i++) {
if (inputStr[pre] === inputStr[next]) {// 偶数
start = next
changeArr(pre, next)
break;
} else if (inputStr[pre] === inputStr[next + 1]) {// 奇數
start = ++next
changeArr(pre, next)
break;
// 沒有找到相等的
} else if (i === len - 1) {
start = len - 1
}
pre++;
next++;
}
// 循环找到不相等的,找到最长回文子串
while (pre > 0 && next < len) {
pre--;
next++;
if (inputStr[pre] !== inputStr[next]) {
if (arr.length % 2 !== 0) {// 奇數
changeArr(pre, next)
} else {
changeArr(++pre, next - 1)// 偶數
}
break
} else {
changeArr(pre, next)
}
}
}
function changeArr(start, end) {
let tempArr = inputStr.slice(start, end + 1)
if (tempArr.length > arr.length) {
arr = tempArr
}
}
console.log(arr.length)