LeetCode 05-19

public class Solution {

    public boolean validPalindrome(String s) {

        //如果字符串为空或者长度为1,直接返回true

        if ("".equals(s) || 1 == s.length()) {

            return false;

        }

        //初始化指针

        int left = 0;

        int right = s.length() - 1;

        //初始化删除标记位

        int flag = 0;

        while (left < right) {

            //对称位置相等,循环继续

            if (s.charAt(left) == s.charAt(right)) {

                left++;

                right--;

                continue;

            }

            //对称位置不等,判断标记位,为0代表尚未使用过删除功能,则继续

            if (flag == 0) {

                //如果左右只差一位,则删除任意一个皆可,返回true

                if (left + 1 == right) {

                    return true;

                }

                //这里需要多看一步,否则会将如"bcaacab"判断为false,错误示例如下

                //step1: b == b , continue;

                //step2: c != a , flag == 0 , a == a, flag ++, continue;

                //step3:a != c , flag == 1 , return false.

                if (s.charAt(left + 1) == s.charAt(right) && s.charAt(left + 2) == s.charAt(right - 1)) {

                    left += 2;

                    right--;

                    flag++;

                    continue;

                }

                //此处与上处类似,不再赘述

                if (s.charAt(left) == s.charAt(right - 1) && s.charAt(left + 1) == s.charAt(right - 2)) {

                    left++;

                    right -= 2;

                    flag++;

                    continue;

                }

            }

            return false;

        }

        return true;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。