/* All Contributors (C) 2020 */
package io.github.dreamylost;

/**
 * @author 梦境迷离
 * @description 字符串回文数（可删除一个字符）
 * @time 2018年4月7日
 */
public class Leetcode_680_Double_Pointer {
    public boolean validPalindrome(String s) {
        int i = 0, j = s.length() - 1;
        while (i < j) {
            // 不是对称
            if (s.charAt(i) != s.charAt(j)) {
                // 删除后面一个或前面一个
                return isPalindrome(s, i, j - 1) || isPalindrome(s, i + 1, j);
            }
            // 对称，直接向前推进
            i++;
            j--;
        }
        return true;
    }

    private boolean isPalindrome(String s, int l, int r) {
        while (l < r) {
            // 假设删除之后仍不相等则直接返回fasle
            if (s.charAt(l) != s.charAt(r)) return false;
            l++;
            r--;
        }
        return true;
    }
}
