百题挑战计划-第一题(LEETCODE_680(Valid Palindrome II - E))

思路:定义两个指针i,j,从字符串的左右两侧开始起跑,相等就继续,不相等就停下,继续判断 (i+1 == j || j-1 == i),这时发现产生了递归现象,于是可以将该判断步骤独立成一个递归函数又因为题干要求 “最多移除一个字符” ,所以这里引入一个计数器count函数可写为 validPalindrome(String s,int i,int j,int count)

/**
 * 百题挑战计划  第一题
 * LEETCODE_680(Valid Palindrome II - E)
 * 思路:定义两个指针i,j,从字符串的左右两侧开始起跑,相等就继续,不相等就停下,
 *      继续判断 (i+1 == j || j-1 == i),这时发现产生了递归现象,于是可以将该判断步骤独立成一个递归函数
 *      又因为题干要求 “最多移除一个字符” ,所以这里引入一个计数器count
 *      函数可写为 validPalindrome(String s,int i,int j,int count)
 */
public class ValidPalindrome {
    public static void main(String[] args) {
        long time1 = System.currentTimeMillis();
        //String s = "eeccccbebaeeabebccceea";
        //String s = "lcupuufxoohdfpgjdmysgvhmvffcnqxjjxqncffvmhvgsymdjgpfdhooxfuupucul";
        //String s = "abcdefghgfedcbba";
        String s = "abca";
        ValidPalindrome v = new ValidPalindrome();
        System.out.println(v.validPalindrome(s));
        long time2 = System.currentTimeMillis();
        int time = (int) (time2 - time1);
        System.out.println("用时:" + time + "毫秒");
    }

    public boolean validPalindrome(String s) {
        if (s == null || s.length() == 0) return true;

        return validPalindrome(s, 0, s.length()-1, 0);
    }

    private boolean validPalindrome(String s, int i, int j, int count) {
        if (count > 1) return false;

        while (i < j) {
            if (s.charAt(i) == s.charAt(j)) {
                i++;j--;
            }
            else {
                return (validPalindrome(s, i+1, j, count+1) || validPalindrome(s, i, j-1, count+1));
            }
        }
        return true;
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值