Open Genzhen opened 3 years ago
function isCanbePalindrome(s) {
let l = 0, r = s.length - 1
while(l < r) {
if (s[l] !== s[r]) { // 一旦遇到不同的,要么取左舍右,要么取右舍左
return isPalindrome(l, r - 1) || isPalindrome(l + 1, r)
}
l++
r--
}
return true
function isPalindrome(l, r) {
while(l < r) {
if (s[l] !== s[r]) return false
l++
r--
}
return true
}
}
function isCanbePalindrome(s) {
function isPalindromeR(l , r, valid) {
while(l < r) {
if (s[l] !== s[r]) {
if (!valid) return false // 一旦 valid 为 false, 则说明是第二次不同
return isPalindromeR(l, r - 1, false) || isPalindromeR(l + 1, r, false)
}
l++
r--
}
return true
}
return isPalindromeR(0, s.length - 1, true)
}
const main = (s) => {
let left = 0
let right = s.length - 1
let maxDelete = 1
while (left <= right) {
if (s[left] === s[right]) {
left++
right--
} else {
if (maxDelete) {
if (s[left + 1] === s[right]) {
left = left + 2
right--
} else if (s[left] === s[right - 1]) {
left++
right = right - 2
}
maxDelete--
} else return false
}
}
return true
}
扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。