有效回文 II

题目链接:

来自罗勇军《算法竞赛》尺取法一节的习题。

思路:反向扫描,设双指针为 \(i\)\(j\)

if (s[i] == s[j]) i++, j--;

否则的话要么删除 \(s[i]\) 或者删除 \(s[j]\),看剩下的字符串是否是回文串。

class Solution {
public:
    bool check(string str, int l, int r) {
        while (l < r) {
            if (str[l] != str[r]) return false;
            l++, r--;
        }
        return true;
    }
    bool validPalindrome(string &s) {
        int n = s.size();
        for (int i = 0, j = n - 1; i < j; ) {
            if (s[i] == s[j]) i++, j--;
            else {
                return check(s, i, j - 1) || check(s, i + 1, j);
            }
        }
        return true;
    }
};
posted @ 2024-05-17 20:49  胖柚の工作室  阅读(15)  评论(0)    收藏  举报