zoukankan      html  css  js  c++  java
  • 力扣Leetcode 680. 验证回文字符串 Ⅱ

    验证回文字符串 Ⅱ

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

    示例 1:

    输入: "aba"
    输出: True
    

    示例 2:

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

    注意:

    1. 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

    题解

    class Solution {
    public:
        bool checkPalindrome(const string& s, int low, int high) { // 判断是否为回文
            for (int i = low, j = high; i < j; ++i, --j) {
                if (s[i] != s[j]) {
                    return false;
                }
            }
            return true;
        }
    
        bool validPalindrome(string s) {
            int low = 0, high = s.size() - 1; // low 为左侧 high为右侧 头尾双指针
            while (low < high) { // 跳出条件
                if (s[low] == s[high]) { // 相等则头尾往中间靠近
                    ++low;
                    --high;
                }
                else { // 不相同时 删除一个可以删左侧 也可以删右侧 所以用递归查找
                  // 只要二者有一个满足即可
                    return checkPalindrome(s, low, high - 1) || checkPalindrome(s, low + 1, high);
                }
            }
            return true;
        }
    };
    
  • 相关阅读:
    校验相关问题
    类型转换和操作符重载 (c#)
    泛型委托Func<string,string>()
    第三次作业 刘惠惠
    刘惠惠1.12
    第二次作业刘惠惠2.6,2.15
    刘惠惠1.8
    第四次作业 刘惠惠
    刘惠惠1.2
    设计模式中的单件模式
  • 原文地址:https://www.cnblogs.com/coderzjz/p/12917192.html
Copyright © 2011-2022 走看看