js-practice/src/string/valid-palindrome-ii.js

38 lines
1.1 KiB
JavaScript

/**
* @param {string} s
* @return {boolean}
*/
export const validPalindrome = function (s, flag = true) {
let l = 0; let r = s.length - 1
while (l < r && s[l] === s[r]) {
l++; r--
}
if (l >= r) return true // 说明是回文
if (flag) return validPalindrome(s.slice(l, r), false) || validPalindrome(s.slice(l + 1, r + 1), false) // 如果不是回文,切左边或者右边,再判断一次
return false
}
// 暴力解法,会超时
// /**
// * @param {string} s
// * @return {boolean}
// */
// export const validPalindrome = function (s) {
// const len = s.length
// const tmpLen = len - 1
// let mid = len >> 1
// if (s.substring(0, mid) === s.substring(len % 2 ? mid + 1 : mid, len).split('').reverse().join('')) {
// return true
// }
// mid = tmpLen >> 1
// for (let n = 0; n < len; n++) {
// const tmp = s.substring(0, n) + s.substring(n + 1, len)
// if (tmp.substring(0, mid) === tmp.substring(tmpLen % 2 ? mid + 1 : mid, tmpLen).split('').reverse().join('')) {
// return true
// }
// }
// return false
// }