zoukankan      html  css  js  c++  java
  • leetcode 680 验证回文字符串II

    原题点这里

    给定一个非空字符串,判断是否可以通过删除一个字符串,使得剩余的字符串为回文串。

    很容易想到双指针,当可以删除时,尝试删除,然后递归。

    public static boolean validSub(String s,int left,int right,int del){
            if(del>1) return false;
            if(left>=right) return true;
            for(int i=left,j=right;i<j;i++,j--){
                if(s.charAt(i)==s.charAt(j)) continue;
                else{
                    if(s.charAt(i+1)==s.charAt(j)&&s.charAt(i)==s.charAt(j-1))
                        return validSub(s,i+1,j,del+1) || validSub(s,i,j-1,del+1);
                    if(s.charAt(i+1)==s.charAt(j)) return validSub(s,i+1,j,del+1);
                    if(s.charAt(i)==s.charAt(j-1)) return validSub(s,i,j-1,del+1);
                    return false;
                }
            }
            return true;
        }
        public static boolean validPalindrome(String s) {
            return validSub(s,0,s.length()-1,0);
        }
    View Code

    这里在考虑递归时,复杂了。

    我们可以用双指针进行判断,如果不同,则判断删掉左边指针的字符||删掉右边的字符。只做这样一次判断就行。无需递归。

    (虽然我的递归中,通过del达到同样的效果,但是如果只删除一次(即只递归一层)),完全可以用循环来替代。

  • 相关阅读:
    skywalking学习
    logstash使用
    AIO编程
    NIO编程
    NIO入门之BIO
    Akka Cluster之集群分片
    Akka Stream之Graph
    【Swift学习笔记-《PRODUCT》读书记录-实现自定义转场动画】
    CoreData 数据模型文件导出NSManagedObject时重复问题
    iOS图片压缩
  • 原文地址:https://www.cnblogs.com/superxuezhazha/p/12918934.html
Copyright © 2011-2022 走看看