zoukankan      html  css  js  c++  java
  • leetcode 680.验证回文字符串

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

    示例 1:

    输入: "aba"
    输出: True
    示例 2:

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

    左右如果相等那就继续比较,当左右不相等的时候,要么删除左边的一个再进行比较,要么删除右边的一个接着进行比较,例子:"abccbma",当比较到b和m的时候不相等了,这个时候要么删除b进行比较,要么删除m再进行比较。

     

    解法一:

    var validPalindrome = function (s) {
            let left = 0;
            let right = s.length -1
            while (left < right) {
                if(s[left] != s[right]){
                    return check(left + 1,right) || check(left, right - 1) // false || true = true
                }
                left++
                right--
                return true
            }
            //判断删除后的字符串是否相等
            function check(left, right){
                while (left < right) {
                    if(s[left] != s[right]) {
                        return false
                    }
                    left++
                    right--
                }
                return true
            }
        }

    不知道哪里错了

    看看别人递归解法吧

    const validPalindrome = (s, count = 0) => {
      for (let i = 0, j = s.length - 1; i < j; i++, j--) {
        if (s[i] === s[j]) {
          continue;
        }
        if (count > 0) {
          return false;
        }
        return validPalindrome(s.slice(i, j), count + 1) || validPalindrome(s.slice(i + 1, j + 1), count + 1);
      }
      return true;
    };
    不积跬步无以至千里
  • 相关阅读:
    RK3288 GMAC整理
    Linux电源管理-Linux regulator framework概述
    SRAM、DRAM、SDRAM、DDR、DDR2、DDR3
    内核错误值
    module_param和module_param_array用法
    VGA
    如何获取显示器的EDID信息
    进程间通信--共享内存
    Java 中的 CAS 简述及原理解析
    volatile 关键字特性解析及单例模式下的使用
  • 原文地址:https://www.cnblogs.com/lyt0207/p/12398082.html
Copyright © 2011-2022 走看看