题解 | #最长回文子串#

最长回文子串

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)
全部评论

相关推荐

就只能3个月,但是要求长期全职实习
Swaying:你确实是能长期实习啊,但是你那时候有事也没啥办法嘛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务