验证回文串(力扣)双指针 JAVA

news2024/11/27 0:47:28

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。

示例 1:

输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。

示例 2:

输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。

示例 3:

输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。

提示:

1 <= s.length <= 2 * 105
s 仅由可打印的 ASCII 字符组成

解题思路:

1、采用双指针

2、过滤掉不是字符数字的字符,由句子左右两边分别开始判断是否是回文串

3、结束条件 left >= right

代码:

class Solution {
    public boolean isPalindrome(String s) {
        int len = s.length();
        int left = 0;
        int right = len - 1;
        
        while(left < right) {
        	 while(left < right && !ifletter(s.charAt(left))) left ++;
        	 while(left < right && !ifletter(s.charAt(right))) right --;
        	 if(left < right && !check(s.charAt(left), s.charAt(right))) return false;
        	 left ++;
        	 right --;
        }
        return true;
    }
    public boolean check(char a, char b) {
    	if(check_nb(a, b) || check_nb(b, a)) return false;
    	if(a == b || Math.abs((int)(a - b)) == 32) return true;
    	return false;
    }
    public boolean ifletter(char a) {
    	if(a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z'|| a >= '0' && a <= '9') return true;
    	return false;
    }
    public boolean check_nb(char a, char b) {
    	if(a >= '0' && a <= '9' && !(b >= '0' && b <= '9')) return true;
    	return false;
    }
}

判断数字字符时,左边是数字字符,那么右边也要是

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

访客报警定位管理系统:提升安全管理水平的创新解决方案

在当前日益复杂的安全环境下&#xff0c;保障人员安全、提高安全响应能力和管理效率成为了各行各业的首要任务。 作为一种先进的安全管理解决方案&#xff0c;访客报警定位管理系统凭借其独特的优势和广泛的应用场景&#xff0c;正逐渐成为各行业安全管理的重要工具。 那么&a…

web前端设计师的主要职责说明(合集)

web前端设计师的主要职责说明1 职责&#xff1a; 1. 根据UI设计师提供的设计图&#xff0c;实现一流的Web界面&#xff0c;优化代码并保持在各浏览器下良好的兼容性; 2. Web前端表现层及与后端交互的架构设计和开发; 3. JavaScript程序模块开发&#xff0c;通用类库、框架编…

树莓派 使用 docker安装showdoc

最近在使用showdoc时感觉挺方便的&#xff0c;但是在树莓派上拉取showdoc对应的镜像时特别慢&#xff0c;熬了一天半发现镜像倒在了最后一步&#xff0c;重试了好几次都没有拉去下来。后来仔细阅读了官网操作文档再加一点小运气今天成功给安装成功了。 showdoc的安装环境&…

【本地电脑搭建Web服务器并用cpolar发布至公网

本地电脑搭建Web服务器并用cpolar发布至公网访问 随着互联网的快速发展&#xff0c;网络也成为我们生活中不可缺少的必要条件&#xff0c;为了能在互联网世界中有自己的一片天地&#xff0c;建立一个属于自己的网页就成为很多人的选择。但互联网行业作为资本密集的行业&#x…

企业网络安全合规框架体系

云安全联盟大中华区发布报告《企业网络安全合规框架体系》&#xff08;以下简称报告&#xff09;&#xff0c;该报告对典型业务场景给出了参考实例&#xff0c;供广大甲方单位、集成商、咨询机构参考。 近些年&#xff0c;随着国内网络安全领域相关法律、法规、政策文件、标准规…

Seata部署(Centos和Docker)

一、简介 Seata 是一款开源的分布式事务框架。致力于在微服务架构下提供高性能和简单易用的分布式事务服 务。在 Seata 开源之前&#xff0c;Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的⻆ 色&#xff0c;帮助经济体平稳的度过历年的双11&#xff0c…

Unity+chatgpt+webgl实现声音录制+语音识别

一、前言 AI二次元女友这个项目持续更新&#xff0c;在window端的语音识别和语音合成的功能&#xff0c;在上一篇博文里已经详细说明了微软Azure语音服务的代码实现。也是为了实现一次代码&#xff0c;多端复用这样的诉求&#xff0c;所以全部的代码实现都改成了web api的方式…

openSUSE leap 15.3安装mysql-community-server

openSUSE Software 下载"https://software.opensuse.org/ymp/home:bjoernv/15.3/mysql-community-server.ymp" wget "https://software.opensuse.org/ymp/home:bjoernv/15.3/mysql-community-server.ymp" 双击"mysql-community-server.ymp" 添…

Flutter Windows通过嵌入Native窗口实现渲染视频

Flutter视频渲染系列 第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频&#xff08;本章&#xff09; 文章目录 Flutter视频渲染系列前言…

FPGA XDMA 中断模式实现 PCIE3.0 QT上位机图片传输 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案图像产生、发送、缓存XDMA简介XDMA中断模式图像读取、输出、显示QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采…

【深度学习之YOLO8】环境部署

目录 一、确定版本CUDA toolkit、cuDNN版本Python、PyTorch版本 二、安装Python下载环境变量验证安装 三、安装Anaconda安装环境变量验证安装创建conda虚拟环境常用命令 四、安装CUDA toolkit下载环境变量验证安装 五、配置cuDNN下载 六、安装PyTorch(torchtorchversiontorchau…

JavaWeb课程设计项目实战(05)——项目编码实践2

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 在本节教程中&#xff0c;我们完成项目的登录功能。 User 请在bean包中创建User类&#xff0c;代码如下&#xff1a; package com.cn.bean; /*** 本文作者&#xff1a;谷…

离线安装mysql8

一、先前往官网下载mysql8 下载地址&#xff1a; https://dev.mysql.com/downloads/ 选择Linux 二、删除Linux中的mysql&#xff08;如果有的话&#xff09;&#xff0c;上传安装包 1、先查看mysql是否存在&#xff0c;命令如下&#xff1a; rpm -qa|grep -i mysql 如果使用…

集成了Eureka的应用启动失败,端口号变为8080

问题 报错&#xff1a;集成了Eureka的应用启动失败&#xff0c;端口号变为8080。 原来运行的项目&#xff0c;突然报错&#xff0c;端口号变为8080&#xff1a; Tomcat initialized with port(s): 8080 (http)并且&#xff0c;还有如下的错误提示&#xff1a; RedirectingE…

keil5编辑器主题配色美化使用(附六款暗黑主题)

一、通过配置文件修改主题 1、在软件安装目下备份以下三个文件&#xff0c;更换主题只需要替换global.prop arm.propglobal.propglobal.prop.def 2、替换配置文件 将已经准备好的配色文件复制到\UV4下替换 https://download.csdn.net/download/qq_43445867/88064961 Theme1…

通讯录--动态版

简易的通讯录往往需要朴实的“烹饪”就能完成一道“美味的佳肴”。 我们需要一个通讯录&#xff0c;能够存储联系人的信息&#xff0c;能够对联系人的信息进行增删查改&#xff0c;查询&#xff0c;按姓名排序。相比对之前的三子棋、扫雷&#xff0c;有了一定的了解&#xff0c…

git commit -m时候没有保存package.json等文件

项目场景&#xff1a; 提示&#xff1a;git add . 和 git commit -m "保存" 操作&#xff0c;没有保存package.json等文件。 解决方案&#xff1a; 1.确保 package.json 文件没有被列在 .gitignore 文件中。打开 .gitignore 文件&#xff0c;检查是否有类似于 packa…

数据库运维——备份恢复

数据库备份&#xff0c;数据库为school&#xff0c;素材如下 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(…

交换一个整数二进制位的奇数位和偶数位

目录 一、方案一 1.求待操作数的二进制序列 2.创建一个数组存放待操作数的二进制序列 3.交换二进制序列奇偶位 4.输出奇偶位交换之后的二进制序列 5.代码 二、方案二&#xff08;宏的实现&#xff09; 1.求待操作数二进制序列偶数位 2.求待操作数二进制序列奇数位 3.求待…

目标检测——yoloV3案例

目录 数据获取TFrecord文件什么是TFrecord文件将数据转换成TFrecord文件读取TFrecord文件数据处理 模型构建模型训练损失函数的计算正负样本的设定模型训练获取数据集加载模型模型训练 模型预测 数据获取 labellmage使用方法 TFrecord文件 什么是TFrecord文件 将数据转换成T…