给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例

示例 1:

输入: “aba”
输出: True

示例 2:

输入: “abca”
输出: True
解释: 你可以删除c字符。

题解

对于验证回文字符串可以设置 i j 头尾指针,向中间缩进判断单个字符是否一致

可以删除一个字符意味着当字符不一致的时候,可以跳过一个字符,多一次验证机会

这里可以分为2种情况,跳过 i 指针字符( i++ ) 或是 跳过 j 指针字符 ( j— ),再接续验证回文字符串并返回结果

  1. /**
  2. * @param {string} s
  3. * @return {boolean}
  4. */
  5. var validPalindrome = function(s) {
  6. let i = 0
  7. let j = s.length - 1
  8. while(j >= i) {
  9. if (s[i] !== s[j]) {
  10. return run(s, i + 1, j) || run(s, i, j - 1)
  11. }
  12. i++
  13. j--
  14. }
  15. return true
  16. };
  17. function run(s, i, j) {
  18. while(j >= i) {
  19. if (s[i] !== s[j]) {
  20. return false
  21. }
  22. i++
  23. j--
  24. }
  25. return true
  26. }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。