当前位置: 首页 > article >正文

680.验证回文串||

解题思路

最多删除一个字符使其成为回文串,首先根据回文串的特点,即两边互相对应。
因此判断的方法可以有两种:

  • 翻转后两个字符串相同,是回文串
  • 使用双指针进行判断

这里需要涉及删除,因此使用双指针,l和r,假设l不等于r,则l++,同时记录删除字符的个数cnt–,如果第二次遇到l不等于r,则不能成为一个回文串,反之则可以。
上面的分析存在漏洞,当l和r所处位置不能构成回文串时,有两种做法,一种是删除l位置的字符,则l++,另一种是删除r位置的字符则r–,当这两种做法至少有一个是回文串则能够继续进行。

class Solution {
    public boolean validPalindrome(String s) {
        // 获取长度
        int len = s.length();
        int left = 0, right = len - 1;
        // 双指针
        while(left < right){
            // 取出字符串中的字符
            char c1 = s.charAt(left), c2 = s.charAt(right);
            // 判断
            if (c1 == c2){
                ++left;
                --right;
            }
            else {
                // 不相等则递归
                return validPalindrome(s, left, right-1) || validPalindrome(s, left+1, right);
            }
        }
        return true;
    }

    public boolean validPalindrome(String s, int left, int right){
        // 该函数只需要判断两种情况能否满足是回文串
        for (int i = left, j = right; i < j; ++i, --j){
            char c1 = s.charAt(i), c2 = s.charAt(j);
            if (c1 != c2){
                return false;
            }
        }
        return true;
    }
}

http://www.kler.cn/a/531880.html

相关文章:

  • 【C语言设计模式学习笔记1】面向接口编程/简单工厂模式/多态
  • 【汽车电子软件架构】AutoSAR从放弃到入门专栏导读
  • 【C++】B2122 单词翻转
  • 电路研究9.2.8——合宙Air780EP中IP 应用相关命令使用方法研究
  • 15 刚体变换模块(rigid.rs)
  • LeetCode:121.买卖股票的最佳时机1
  • 基于“蘑菇书”的强化学习知识点(二):强化学习中基于策略(Policy-Based)和基于价值(Value-Based)方法的区别
  • Debezium Oracle Connector SCN处理优化指南
  • Linux篇——权限
  • 02.03 递归运算
  • 中间件漏洞之CVE-2024-53677
  • C++ 游戏开发:完整指南
  • 浅谈《图解HTTP》
  • Baklib如何在知识管理领域成为领军者与六款产品的综合评析
  • Skyeye 云 VUE 版本 v3.15.6 发布
  • [Java]抽象类
  • 【Three.js+React】教程002:添加lil-gui控制器和加载GLTF模型
  • 股票入门知识
  • 文字显示省略号
  • 如何创建折叠式Title
  • 探秘Linux IO虚拟化:virtio的奇幻之旅
  • HTTP异步Client源码解析
  • 01:安装和部署
  • Alibaba grpc Dubbo view
  • AMBA总线学习4--AHB-lite总线
  • 读书笔记 | 《最小阻力之路》:用结构思维重塑人生愿景