LeetCode双指针:验证回文串 II

LeetCode双指针:验证回文串 II

## 题目描述

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

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

示例 1:

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

示例 2:

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

示例 3:

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

解题思路

利用双指针思想,分别从左从右进行遍历,当左右两个指针遇到不等的元素时,处理的方式是删除 左指针指向的字符 或者 右指针指向的字符,判断 剩余的所有字符 是否可以构成回文串。如果删除一个字符后,剩余的全部字符构成字符串 是回文字符串,那么就满足题意。

代码

class Solution {
       public boolean validPalindrome(String s) {
        int front = 0;
        int end = s.length()-1 ;
        while (front < end) {
            if (s.charAt(front) != s.charAt(end)) {
                return validPalindromeHelper(s, front + 1, end) || validPalindromeHelper(s, front, end - 1);
            }
            front++;
            end--;
        }
        return true;
    }
    public boolean validPalindromeHelper(String s, int front, int end) {
        while (front < end) {
            if (s.charAt(front) != s.charAt(end)) {
                return false;
            }
            front++;
            end--;
        }
        return true;
    }
}

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)