680. 验证回文字符串 Ⅱ『简单』

题目来源于力扣(LeetCode

一、题目

680. 验证回文字符串 Ⅱ

题目相关标签:字符串

注意:

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

二、解题思路

  1. 通过左右双指针遍历字符串 s

  2. 若左右指针上的元素不相等时,说明字符串 s 不是回文串

  3. 再次判断是否可以通过删除一个元素的方式来满足字符串 s 成为回文串

  4. 通过“删除” left 索引上的元素与 right 索引上的元素,来判断字符串 s 是否为回文串

三、代码实现

public static boolean validPalindrome(String s) {
    int left = 0, right = s.length() - 1;
    while (left <= right) {
        if (s.charAt(left) == s.charAt(right)) {
            left ++;
            right --;
        } else {
            // 字符串 s 不为回文串时,进行删除一个字符后,再判断是否回文串的操作
            boolean flagA = true, flagB = true;
            // 循环,判断删除 right 索引上的元素后,字符串是否为回文
            for (int i = left, j = right - 1; i <= j - 1; i++, j--) {
                if (s.charAt(i) != s.charAt(j)) {
                    flagA = false;
                    break;
                }
            }
            // 循环,判断删除 left 索引上的元素后,字符串是否为回文
            for (int i = left + 1, j = right; i <= j; i++, j--) {
                if (s.charAt(i) != s.charAt(j)) {
                    flagB = false;
                    break;
                }
            }
            // 二者有一个为 true,则结果为 true
            return flagA || flagB;
        }
    }
    return true;
}

四、执行用时

五、部分测试用例

public static void main(String[] args) {
    String str =  "aba";  // output: true
//    String str =  "abca";  // output: true
//    String str =  "abccdba";  // output: true

    boolean result = validPalindrome(str);
    System.out.println(result);
}
posted @ 2020-07-13 21:13  知音12138  阅读(322)  评论(0编辑  收藏  举报