• 【LeetCode】680. 验证回文字符串 Ⅱ


    题目

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

    示例 1:

    输入: "aba"
    输出: True
    

    示例 2:

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

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

    思路

    头尾双指针,从两边向中间检查头尾指针指向字符是否相等,如果不相等,则跳过头指针或尾指针,继续判断中间字符字符串是否满足回文串。

    代码

    时间复杂度:O(n)
    空间复杂度:O(1)

    class Solution {
    public:
        bool validPalindrome(string s) {        
            int i = 0, j = s.size() - 1;
            while (i < j) {
                if (s[i] == s[j]) {
                    ++i, --j;
                } else {
                    return helper(s, i, j - 1) || helper(s, i + 1, j);
                }
            }
            return true;
        }
    
        bool helper(string &s, int low, int high) {        
            while (low < high) {
                if (s[low++] != s[high--]) return false;
            }       
            return true;
        }
    };
    
  • 相关阅读:
    新汉诺塔
    车的放置
    [NOI 2015]荷马史诗
    [JSOI2008]星球大战
    分组
    星空
    [Luogu4175][CTSC2008]网络管理Network
    [Luogu2617]Dynamic Rankings(整体二分)
    2018冬令营赛前停课总结
    [BZOJ2752][HAOI2012]高速公路
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12919122.html
Copyright © 2020-2023  润新知