LeetCode | 125.验证回文串

在这里插入图片描述
这道题一开始的想法是把原字符串的非数字英文字符去掉,然后判断剩下的字符串是否为回文串即可,其中去掉非数字英文字符可以遍历一遍字符串依次处理,也可以用正则表达式,然后判断是否是回文串只需要两个指针,一头一尾,只要不相等就返回false,相等就两个指针靠近,直到两个指针重合或者相邻且所指字符相等即可

import re
class Solution(object):def isPalindrome(self, s):""":type s: str:rtype: bool"""ss = self.remove_non_alphanumeric(s)if len(ss) == 0:return Truei, j = 0, len(ss) - 1while i <= j:if ss[i].lower() == ss[j].lower():i += 1j -= 1if i == j:return Trueif i == j-1 and ss[i].lower() == ss[j].lower():return Trueelse:return Falsereturn Truedef remove_non_alphanumeric(self, s):# 使用正则表达式匹配非字母数字字符,并将其替换为空字符串return re.sub(r'[^a-zA-Z0-9]', '', s)class Solution:def isPalindrome(self, s: str) -> bool:sgood = "".join(ch.lower() for ch in s if ch.isalnum())n = len(sgood)left, right = 0, n - 1while left < right:if sgood[left] != sgood[right]:return Falseleft, right = left + 1, right - 1return True

在这里插入图片描述
但是这里还可以再继续优化空间复杂度,我们可以得到空间复杂度为 O ( 1 ) O(1) O(1)的算法,直接在原字符串 s 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。

class Solution:def isPalindrome(self, s: str) -> bool:n = len(s)left, right = 0, n - 1while left < right:while left < right and not s[left].isalnum():left += 1while left < right and not s[right].isalnum():right -= 1if left < right:if s[left].lower() != s[right].lower():return Falseleft, right = left + 1, right - 1return True

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

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

相关文章

OpenCV目标识别

一 图像轮廓 具有相同颜色或强度的连续点的曲线。 图像轮廓的作用 可以用于图像分析 物体的识别与检测 注意 为了检测的准确性&#xff0c;需要先对图像进行二值化或Canny操作。 画轮廓时会修改输入的图像。 轮廓查找的API findContours(img,mode,ApproximationMode,...)…

upload-labs第八关教程

upload-labs第八关教程 一、源代码分析代码审计 二、绕过分析点绕过上传eval.php使用burp suite进行抓包修改放包&#xff0c;查看是否上传成功使用中国蚁剑进行连接 一、源代码分析 代码审计 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(U…

推箱子-小游戏

学习目标&#xff1a; 巩固Java基础&#xff0c;数据类型、二维数组、条件语句等&#xff1b; 效果展示&#xff1a;

CSS【详解】样式选择器的优先级(含提升优先级的方法)

数值越大&#xff0c;优先级越高&#xff0c;尽量保持较低的优先级&#xff0c;以便使用更高优先级的选择器重置样式 0级——通配选择器、选择符和逻辑组合伪类。逻辑组合伪类有:not()、:is()和:where等&#xff0c;这些伪类本身并不影响CSS优先级&#xff0c;影响优先级的是括…

Python基础用法 之 变量

1.变量的定义 变量的作用&#xff1a;是⽤来保存数据的。定义的语法&#xff1a;变量名 数据值使用&#xff1a;直接使⽤变量名 即可使⽤变量中存储的数据。注意&#xff1a;变量必须先定义后使用。 (即 必须 先存⼊数据 才能 获取数据) 。 # 需求 1, 定义⼀个变量 保存你的名…

(超详细)基于动态顺序表实现简单的通讯录项目

前言&#xff1a; 我们在上一章节用c语言实现了线性表中的的动态顺序表&#xff0c;那么顺序表就只是顺序表吗&#xff1f;当然不是&#xff0c;使用顺序表结构可以实现很多项目&#xff0c;许多项目的数据结构都会用到顺序表&#xff0c;本章节我们就要使用顺序表实现一个简易…

【论文阅读】AttnDreamBooth | 面向文本对齐的个性化图片生成

文章目录 1 动机2 方法3 实验 1 动机 使用灵活的文本控制可以实现一些特定的概念的注入从而实现个性化的图片生成。 最经典的比如一些好玩的动漫人物的概念&#xff0c;SD大模型本身是不知道这些概念的&#xff0c;但是通过概念注入是可以实现的从而生成对应的动漫人物 两个…

创建阿里云的免费镜像仓库

1、登录 阿里云 首先进入阿里云的官网&#xff0c;如果没有注册的需要先注册&#xff0c;这里就不过多的讲解了。 2、搜索 登录完毕后点击右上角的控制台 进入管理页面。或者直接在搜索框中输入容器镜像服务 点击进入 这里我是已经开通过了&#xff0c;如果你还没有开通的…

SpringBoot 第一天

什么是Spring Boot 学习过spring&#xff0c;并且做过项目的估计都经历过&#xff0c;xml文件的繁杂配置&#xff0c;让人眼花缭乱&#xff0c;且极易出错&#xff0c;因此 Spring 一度被称为“配置地狱” 为了简化 Spring 应用的搭建和开发过程&#xff0c;Pivotal 团队在 S…

什么是git?

前言 Git 是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。是的&#xff0c;我对git的介绍就一条&#xff0c;想看简介的可以去百度一下&#x1f618;&#x1f618;&#x1f618; 为什么要用git&#xff1f; OK&#xff0c;想象一下…

《C语言》文件操作

文章目录 一、认识文件1、文件的概念2、程序文件3、数据文件4、文件名 三、二进制文件和文本文件四、文件的打开和关闭1、流2、标准流3、文件指针4、文件的关闭和打开 四、文件的顺序读写文件的随机读写1、fseek2、ftell3、rewind4.int origin 一、认识文件 主要讨论数据文件 1…

Javaweb06-Jsp技术

Jsp技术 一.Jsp的运行原理 **概述&#xff1a;**JSP是Java服务器页面&#xff0c;既可以写静态页面代码&#xff0c;也可以写动态页面代码 **特点&#xff1a;**跨平台性&#xff0c;业务代码相分离&#xff0c;组件重用&#xff0c;预编译 运行原理&#xff1a; 客户端发生…

如何设计一个秒杀系统?

这篇分享源自之前购买的极客时间课程《如何设计一个秒杀系统》&#xff0c;以及书籍《亿级流量网站架构核心技术》。 这两个讲的都是关于高并发系统设计的&#xff0c;感觉收获颇多。 本篇内容对核心要点进行了摘录&#xff0c;也结合网上一些文章&#xff0c;希望能分享所得…

运算符及表达式+基本语句和函数使用的详细讲解

运算符及表达式 运算符及表达式 在C语言中&#xff0c;运算符是用于执行特定操作的符号&#xff0c;而表达式则是由运算符和操作数组成的式子。 1) 运算符 运算符的目数 单目运算符&#xff1a;只需要一个操作数&#xff0c;如 !&#xff08;逻辑非&#xff09;、&#xf…

简易开发一个app

即时设计网站 即时设计 - 可实时协作的专业 UI 设计工具 需要先设计好UI界面 上传到codefun 首次需要安装 自动生成代码 打开hb软件 新建项目 打开创建的项目 删除代码 复制代码过去 下载图片 将图片放到文件夹里 改为这种格式 index.vue 如果不需要uni-app导航栏可以修改 …

项目文件预览

在实际项目开发过程&#xff0c;项目使用数据存在多种形式&#xff0c;“文件”也是一种常见形式&#xff0c;因此&#xff0c;“文件预览”功能变成了常规需求。 kkFileView项目使用流行的spring boot搭建&#xff0c;易上手和部署。万能的文件预览开源项目&#xff0c;基本支…

以太网基础知识(二)—NRZ,PAM4调制技术

1&#xff1a;码元 了解调制技术需要引出“码元”的概念。 一个码元就是一个脉冲信号&#xff0c;即一个最小信号周期内的信号&#xff0c;我们都能够理解&#xff0c;最简单的电路&#xff0c;以高电平代表1&#xff0c;低电平代表0&#xff0c;一个代表1或者0的信号&#x…

分层解耦

三层架构 controller:控制层&#xff0c;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据&#xff0c; service:业务逻辑层&#xff0c;处理具体的业务逻辑。 dao:数据访问层(Data Access Object)(持久层)&#xff0c;负责数据访问操作&#xff0c;包括数…

讨论C++模板

讨论C模板 函数重载和泛型编程模板分类函数模板语法原理函数模板的实例化隐式实例化显示实例化 匹配原则 类模板语法类模板的实例化 C支持了函数重载&#xff0c;通过函数名相同&#xff0c;参数列表不同来构成函数重载&#xff0c;以达到方便程序员调用。但还是没有改变代码大…

KT-H6测距模块标品,测距范围1500m,demo报价1000RMB,批量报价500RMB

激光测距传感器是一种用于测量距离的模块,通常由传感器和相关电子设备组成,测距模块可以集成到各种设备和系统中,以实现准确的测距和定位功能。KT-H6系列激光测距模块,为自主研发,激光波长905nm的激光器,专为热成像、夜视仪、无人机、安防、瞄具等产品定身打造,其优点是…