【算法】字符串算法题——回文(学习篇)

2023-11-08

在这里插入图片描述

  1. 验证回文串
    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串

示例 2:

输入: "race a car"
输出: false
解释:"raceacar" 不是回文串
class Solution {
    public boolean isPalindrome(String s) {
        char[] arr = new char[s.length()];
        int index = 0;
        // 处理成一个小写字符和数字组成的数组
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')|| ('0' <= c && c <= '9')){
                arr[index++] = 'A' <= c && c <= 'Z' ? (char)(c - 'A' + 'a'): c;
            }
        }
        int l = 0,r = index - 1;
        // 验证是否是回文
        while (l < r) {
            if (arr[l] != arr[r]) return false;
            l++;
            r--;
        }
        return true;
    }
}
  1. 验证回文字符串 Ⅱ
    给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: s = "aba"
输出: true

示例 2:

输入: s = "abca"
输出: true
解释: 你可以删除c字符。

示例 3:

输入: s = "abc"
输出: false
class Solution {
    // 删除一次
    private boolean valotile = false;
    public boolean validPalindrome(String s) {
        return check(0,s.length() - 1,s);
    }
    public boolean check(int l,int r,String s){
        // System.out.println(l+";"+r);
        while (l < r) {
            // System.out.println(l+"  l="+s.charAt(l) +"  "+r +"  r=" +s.charAt(r) );
            // 不相等的时候判断
            if (s.charAt(l) != s.charAt(r)){
                // 左边下标+1 判断是否是回文
                if (!valotile && l + 1 <= r && s.charAt(l + 1) == s.charAt(r)) {
                    // 跳过一次错误设置为true
                    valotile = true;
                    if(check(l + 1,r,s)) return true;;
                    // 还原状态
                    valotile = false;
                }
                //  System.out.println("rrrrrrrrrrrrrrrrr   "+l+"  l="+s.charAt(l) +"  "+r +"  r=" +s.charAt(r - 1) );
                // 右边下标-1 判断是否是回文
                if (!valotile && l <= r - 1 && s.charAt(l) == s.charAt(r - 1)){
                    // 跳过一次错误设置为true
                    valotile = true;
                    if(check(l,r - 1,s)) return true;;
                }
                return false;
            } 
            l++;
            r--;
        }
        return true;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【算法】字符串算法题——回文(学习篇) 的相关文章

  • chatGPT身份指令

    充当 Linux 终端 我想让你充当 Linux 终端 我将输入命令 您将回复终端应显示的内容 我希望您只在一个唯一的代码块内回复终端输出 而不是其他任何内容 不要写解释 除非我指示您这样做 否则不要键入命令 当我需要用英语告诉你一些事情时

随机推荐

  • 静态变量与静态函数

    堆与栈 1 栈区 stack 由编译器自动分配释放 存放函数的参数值 局部变量的值等 操作是类似于数据结构中的栈 2 堆区 heap 一般有程序员分配和释放 动态存储分配 分配方式类似于链表 3 全局区 static 全局变量和静态变量的存
  • debian ubuntu 设置DNS 永久设置 重启系统不会丢失

    debian ubuntu 设置DNS 永久设置 重启系统不会丢失 1 debian ubuntu 设置DNS 快捷步骤 2 下面是命令解释 2 1 决定系统dns的文件是 etc resolv conf 2 2 谁能最终影响 etc re
  • 封神台——Cookie伪造目标权限(存储型XSS)

    点击传送门看到的是一个留言板 我们首先要判断是否存在XSS 于是输入一串JS代码 看是否会弹出一个内容为 zkaq 的弹窗 出现了 说明存在XSS漏洞 关于XSS漏洞的科普如下 跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代
  • loadtxt()读取数据类型转换/string转换float/ValueError: could not convert string to float:

    实验数据样式 Test csv 只显示几行 0 589469 5 000059 0 480721 0 000204 0 000204 12 945284 4 999956 9 671936 0 000145 0 000145 9 70103
  • 每天一个小技巧之Bash Shell Debug

    sh x xxxx sh
  • 多态的定义及原理

    一 多态的概念和定义 1 多态的概念 多态 Polymorphism 同字面意思意为多种形态 本质就是不同对象完成同一行为产生的不同结果 2 多态的构成条件 多态是在不同继承关系的类对象 去调用同一函数 产生了不同的行为 在继承中要构成多态
  • 基于Pytorch的模型推理

    训练部分说明 假设我们现在有两个文件 first file train py 用于训练模型 second file inference py 用于推理检测 在train py文件中我们使用了定义了一个类 里面声明了我的网络模型 例如 cla
  • java 备份sqlserver部分表_SQLServer备份指定表

    先定义表类型 CREATE TYPE t bak tables AS TABLE table name VARCHAR 200 然后再定义备份过程 CREATE PROC sp bak tables tbs t bak tables REA
  • 火线精英服务器怎样可以稳定,火线精英怎么操控好速度慢威力大的斩月

    关键词 火线精英怎么操控好速度慢威力大的斩月 火线精英斩月怎么操控 火线精英怎么操控好斩月 火线精英斩月怎么用 火线精英斩月是一把新出的刀 外格炫酷 威力惊人 美中不足的是他的攻速 这地方是硬伤啊 但是 作为新一代的神器 怎样才能操控好呢
  • Intellij Idea单元测试覆盖率插件JaCoCo的使用

    JaCoCo是Java代码单元测试覆盖率工具 可以用于IDE 也可以用于Maven等构建工具 IDE 主要介绍Intellij Idea中的使用 Eclipse请查看Jacoco Eclipse简单操作 Intellij Idea用法 调整
  • PXE自动化安装CentOS 8

    安装前准备 关闭防火墙和SELINUX DHCP服务器静态IP 切勿用桥接模式 最好是NET模式而且把自动分配DHCP对勾取消 查看防火墙和seelinux是否关闭 root centos8 firewall cmd state not r
  • Qt5 的类 QPoint,QPointF(相关的方法,不会的都在)

    QPoint QPoint官网链接 简介 QPoint 类使用整数精度来定义平面中的一个点 包含的成员 我觉得你可能看不懂的成员使用的方法 1 dotProduct const QPoint const QPoint int 参数是两个点的
  • 解决 Ubuntu 和其他发行版上的 WSL2 网络无法访问的问题

    翻译于Kontext 的 Resolution for WSL2 Network Unreachable Issue on Ubuntu and Other Distros 对于我的 Ubuntu 1 2 发行版 从 WSL20 升级到 W
  • Roblox学习笔记

    概述 Roblox笔记 可能会顺便写一下Lua相关的 1 Roblox中变化整个物体 1 通过组合为Model整体变换 问题概要 Unity中 改变父物体的Transform子物体会一起变换 Roblox中 在 属性 面板中有两个与位置相关
  • 智慧PG集成开发平台pgting-cli发布了

    介绍 两周前我们发布了智能页面搭建平台 智慧PG pgting 深受用户青睐 很多用户尝试了在线开发组件 为了方便用户定制开发组件和组件共享 智慧PG设计之初就考虑了组件定制开发问题 为此 我们设计和研发了智慧PG集成工作台pgting c
  • 软件测试金融项目,在测试的时候一定要避开的一些雷区

    软件测试金融项目需要格外谨慎和专注 因为这些项目通常涉及大量的交易 用户隐私和其他敏感信息 以下是一些软件测试金融项目时需要关注的方面 1 数据保护 在测试金融项目时 必须确保用户数据和投资信息得到保护 测试人员必须确保测试环境和测试数据安
  • 【C++】[boost]::enable_shared_from_this类实例

    原来误以为可以用作单例 生命周期与应用本身同寿那种 后来参考例子后发现是智能指针管理下的实例 1 需要继承自enable shared from this 比如说 class Y public Boost enable shared fro
  • 安装使用MMDeploy(Python版)

    安装使用MMDeploy Python版 一 安装 MMDeploy python mmdeploy main tools deploy py mmdeploy main configs mmdet detection detection
  • 蓝牙的知识总结(1)

    1 SoC System on Chip 称为系统级芯片 一个产品 是一个有专用目标的集成电路 其中包含完整系统并有嵌入软件的全部内容 同时它又是一种技术 用以实现从确定系统功能开始 到软 硬件划分 并完成设计的整个过程 从狭义角度讲 它是
  • 【算法】字符串算法题——回文(学习篇)

    验证回文串 给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 说明 本题中 我们将空字符串定义为有效的回文串 示例 1 输入 A man a plan a canal Panama 输出 true 解释 ama