leetcode680 验证回文串 II

文章目录

  • 1. 解法
  • 2. 原题 [680. 验证回文串 II](https://leetcode.cn/problems/valid-palindrome-ii/)


1. 解法

利用双指针,分别指向s的头尾,如果字母相同,left++,right–,当走到某处发现left != right,需要删除一个字符,删除left,就要判断剩余的[left+1,right]是否为回文,同理,删除right,判断[left,right -1]。此外由于最多删除一个,所以只调用一次辅助函数。

class Solution {
    public boolean validPalindrome(String s) {
        int l = 0;
        int r = s.length() - 1;
        while(l < r){
            if(s.charAt(l) != s.charAt(r)){
                return helper(s, l, r - 1) || helper(s, l + 1, r);
            }
            l++;
            r--;
        }
        return true;
    }
    
    private boolean helper(String s, int left, int right){
        while(left < right){
            if (s.charAt(left) != s.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}

2. 原题 680. 验证回文串 II

给你一个字符串 s最多 可以从中删除一个字符。

请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false

示例 1:

输入:s = "aba"
输出:true

示例 2:

输入:s = "abca"
输出:true
解释:你可以删除字符 'c' 。

示例 3:

输入:s = "abc"
输出:false

提示:

  • 1 < = s . l e n g t h < = 1 0 5 1 <= s.length <= 10^5 1<=s.length<=105
  • s 由小写英文字母组成

你可能感兴趣的:(算法,leetcode,数据结构)