• 680. 验证回文字符串 Ⅱ


    双指针+递归来处理

    题目要求只删除一个元素,我们可以使用双指针一次比较头尾字符,遇到

    不一致的字符做删除操作,这里就出现了2种方案,删除左侧字符还是右侧字符

    于是我们递归来处理这2种情况。同时使用全局变量记录删除元素数,当大于1时

    即可判定为false

    时间O(n),空间O(1)(注意,这里虽然存在递归,但是根据题意以及剪枝操作,这里实际上只递归了1层)

     1 class Solution {
     2     int count=0;
     3     public boolean validPalindrome(String s) {
     4         int left=0,right=s.length()-1;
     5         while(left<right){
     6             if(s.charAt(left)==s.charAt(right)){
     7                 left++;
     8                 right--;
     9             }else{
    10                 count++;
    11                 if (count>1){
    12                     return false;
    13                 }
    14                 // 递归时需要注意边界值处理,substring是不包含右侧边界的
    15                 return validPalindrome(s.substring(left,right)) || 
    16                 validPalindrome(s.substring(left+1,right+1));
    17             }
    18         }
    19         return true;
    20     }
    21 }
    争取早日不再是一只菜鸡
  • 相关阅读:
    DAO模式多表联查
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
    poj 1220 NUMBER BASE CONVERSION
    poj 1964 City Game
    Odd number problem
    POJ 2983 M × N Puzzle
    L O V E
    【Mybatis】【3】处理大于号小于号及其他特殊字符
  • 原文地址:https://www.cnblogs.com/jchen104/p/14733966.html
Copyright © 2020-2023  润新知