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

L23.【LeetCode笔记】验证回文串(剖析几种解法)

目录

1.题目

2.自解

提交结果

反思

大小写之间的位运算

提交结果

3.代码优化

提交结果

​编辑

4.LeetCode网友提供的解法


1.题目

https://leetcode.cn/problems/XltzEq/description/

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

本题中,将空字符串定义为有效的 回文串 

 

示例 1:

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

示例 2:

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

 

提示:

  • 1 <= s.length <= 2 * 105
  • 字符串 s 由 ASCII 字符组成

2.自解

将原数组中所有字母(将小写字母转换为大写字母)和数字字符复制到另一个数组中之后用双指针算法

双指针算法参见L8.【LeetCode笔记】回文数

bool isPalindrome(char * s)
{if (s==NULL)return true;int length=strlen(s);char* arr=(char*)malloc(length);int length_c=0;for (int i=0;i<length;i++){if (!((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z')||(s[i]>='0' &&s[i]<='9')))continue;arr[length_c++]=toupper(s[i]);}char* left=&arr[0];char* right=&arr[length_c-1];while (left < right){if (*left == *right){left++;right--;continue;}elsereturn false;}free(arr);return true;}

备注:toupper函数为将小写字母转换为大写字母返回,如果非小写字母,返回原字符

cplusplus网对该函数的详细解释

cbc464027097423ea9054cca7aa208cd.png

提交结果

2a30dc7e90f84eccbe0371169946bdbe.png

空间复杂度为eq?O%28N%29,可以想办法降至eq?O%281%29

反思

其实没有必要调用toupper,用位运算更加简洁而且更快

 'A': 0100 0001b 'a': 0110 0001b 'Z': 0101 1010 'z': 0111 1010 ,可以发现大小写之间只差了

0010_ 0000b

大小写之间的位运算

对于字符c有

c ^ 32 大小写反转 (汇编 xor byte c,0010_0001b)

c | 32 大写转小写或者小写转小写(汇编 or byte c,0010_0001b)

c & ~32 小写转大写或者大写转大写(汇编 and byte c,1101_1111b)

因此将arr[length_c++]=toupper(s[i]);改成arr[length_c++]=s[i] & ~32;或arr[length_c++]=s[i] | 32;都可

提交结果

a010df2ac3604baeb27ae3312a31e346.png

aa94f40e124045caa30f1dbeee9faa4a.png 

3.代码优化

直接在原数组的基础上使用双指针,时间复杂度为eq?O%281%29

bool isPalindrome(char * s)
{if (s==NULL)return true;int length=strlen(s);char* left=&s[0];char* right=&s[length-1];while (left < right){if (!((*left>='A'&&*left<='Z')||(*left>='a'&&*left<='z')||(*left>='0' &&*left<='9'))){left++;continue;}if (!((*right>='A'&&*right<='Z')||(*right>='a'&&*right<='z')||(*right>='0' &&*right<='9'))){right--;continue;}if ((*left| 32) == (*right| 32)){left++;right--;continue;}elsereturn false;}return true;
}

注意这里:*left和*right强制转为小写再比较(*left| 32) == (*right| 32) 

提交结果

f90f2a34f0a944bea75ef695ef927edc.png

4.LeetCode网友提供的解法

bool isPalindrome(char* s)
{int len = strlen(s);int i = 0, j = 0;for (i = 0, j = len - 1; i < j; i++, j--){for (; !isdigit(s[i]) && !isalpha(s[i]) && i < j;){i++;}for (; !isdigit(s[j]) && !isalpha(s[j]) && i < j;){j--;}s[i] = toupper(s[i]);s[j] = toupper(s[j]);if (s[i] != s[j]){return false;}}return true;
}

积累两个函数

isdigit(c):如果待检测的字符c是0到9之间(十进制)的数字字符,则返回非0值,否则返回0

isalpha(c):如果待检测的字符c字母,则返回非0值,否则返回0

相关文章:

L23.【LeetCode笔记】验证回文串(剖析几种解法)

目录 1.题目 2.自解 提交结果 反思 大小写之间的位运算 提交结果 3.代码优化 提交结果 ​编辑 4.LeetCode网友提供的解法 1.题目 https://leetcode.cn/problems/XltzEq/description/ 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数…...

FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)

目录 前言 一. SR-IOV 的起源与发展 1. SR-IOV 的起源与时间线 2. SR-IOV 的诞生原因 3. SR-IOV 的详细介绍 二. SR-IOV 和 PCI 之间的关系 三. PCI 的起源与演进 1. PCI 的起源与时间线 2. PCI 的关键特性 四. FPGA 的独特魅力 1. FPGA 的定义与特性 2. FPGA 的内…...

解决navicat 导出excel数字为科学计数法问题

一、原因分析 用程序导出的csv文件&#xff0c;当字段中有比较长的数字字段存在时&#xff0c;在用excel软件查看csv文件时就会变成科学技术法的表现形式。 其实这个问题跟用什么语言导出csv文件没有关系。Excel显示数字时&#xff0c;如果数字大于12位&#xff0c;它会自动转化…...

[Unity] AppLovin Max接入Native 广告 Android篇

把下载下来的maxnativelibrary-release-文件放在Plugins/Android下 将这一行加入到mainTemplate.gradle文件中 implementation androidx.constraintlayout:constraintlayout:2.1.4添加下面的两个脚本 using System; using System.Collections; using System.Collections.Gener…...

Source Insight 4.0的安装

一、安装与破解 1、下载Source Insight 4.0安装包 https://pan.baidu.com/s/1t0u1RM19am0lyzhlNTqK9Q?pwdnvmk 2、下载程序破解补丁包 https://pan.baidu.com/s/1irvH-Kfwjf4zCCtWJByqJQ 其中包含文件si4.pediy.lic 和 sourceinsight4.exe。 3、安装下载的Source Insight …...

远程调试软件对比与使用推荐

远程调试软件对比与使用推荐 远程调试是现代软件开发中不可或缺的一部分&#xff0c;尤其是在处理分布式系统、云端服务或远程服务器上的问题时。以下是对几种常见远程调试工具的详细对比和推荐使用场景。 1. GDB (GNU Debugger) 特点 开源&#xff1a;完全免费且开源&…...

鸿蒙项目云捐助第二讲鸿蒙图文互动基本程序实现

鸿蒙项目云捐助第二讲鸿蒙图文互动基本程序实现 结合第一讲建立的“Hello World”程序&#xff0c;得到如下图所示的界面。 这里的“Hello World”是通过“Priview”显示出来的。在这个界面中进行开发的前奏曲&#xff0c;可以通过点击更换图片的案例来体会一下鸿蒙Next的开发…...

求解球面的一组正交标架

目录 求解球面的一组正交标架 求解球面的一组正交标架 球面 r ( u , v ) ( a cos ⁡ u cos ⁡ v , a cos ⁡ u sin ⁡ v , a sin ⁡ u ) \mathbf{r}(u,v)\left(a\cos u\cos v,a\cos u\sin v,a\sin u\right) r(u,v)(acosucosv,acosusinv,asinu), 求得 r u ( − a sin ⁡ u c…...

php.ini 文件上传/执行时间/部分配置新手教程

1、上传文件大小配置 一般需要同时配置“upload_max_filesize”、“post_max_size”&#xff0c;配置格式如下&#xff1a; file_uploads On ;是否允许HTTP文件上传 upload_max_filesize 2M ;设置单个文件上传的最大尺寸 post_max_size 8M ;设置 POST 请求体的最大尺寸&am…...

【Leetcode Top 100】102. 二叉树的层序遍历

问题背景 给你二叉树的根节点 r o o t root root&#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 数据约束 树中节点数目在范围 [ 0 , 2000 ] [0, 2000] [0,2000] 内 − 1000 ≤ N o d e . v a l ≤ 1000 -1…...

【C++笔记】AVL树

前言 各位读者朋友们大家好&#xff0c;上期我们讲解了map和set这两大容器的使用&#xff0c;这一期我们讲解最早的平衡二叉搜索树——AVL树。 目录 前言一. AVL树的概念二. AVL树的实现2.1 AVL树的结构2.2 AVL树的插入2.2.1 AVL树插入一个值的大致过程2.2.2 平衡因子的更新2…...

【竞技宝】LOL:JDG官宣yagao离队

北京时间2024年12月13日,在英雄联盟S14全球总决赛结束之后,各大赛区都已经进入了休赛期,目前休赛期也快进入尾声,LPL大部分队伍都开始陆续官宣转会期的动向,其中JDG就在近期正式官宣中单选手yagao离队,而后者大概率将直接选择退役。 近日,JDG战队在官方微博上连续发布阵容变动消…...

双目摄像头标定方法

打开matlab 找到这个标定 将双目左右目拍的图像上传&#xff08;左右目最好不少于20张&#xff09; 等待即可 此时已经完成标定&#xff0c;左下角为反投影误差&#xff0c;右边为外参可视化 把这些误差大的删除即可。 点击导出 此时回到主页面&#xff0c;即可看到成功导出 Ca…...

相差不超过k的最多数,最长公共子序列(一),排序子序列,体操队形,青蛙过河

相差不超过k的最多数 链接:相差不超过k的最多数 来源&#xff1a;牛客网 题目描述&#xff1a; 给定一个数组&#xff0c;选择一些数&#xff0c;要求选择的数中任意两数差的绝对值不超过 &#x1d458; 。问最多能选择多少个数&#xff1f; 输入描述: 第一行输入两个正整…...

【自然语言处理与大模型】使用llama.cpp将HF格式大模型转换为GGUF格式

llama.cpp的主要目标是在本地和云端的各种硬件上以最小的设置和最先进的性能实现LLM推理。是一个专为大型语言模型&#xff08;LLM&#xff09;设计的高性能推理框架&#xff0c;完全使用C和C编写&#xff0c;没有外部依赖&#xff0c;这使得它可以很容易地被移植到不同的操作系…...

MongoDB存储照片和文件存储照片的区别在那里?

一、维度对比 比较维度MongoDB存储照片文件系统存储照片数据模型使用文档存储数据&#xff0c;可以存储不同结构的照片。以文件的形式存储照片&#xff0c;每个文件独立存在。性能高效的数据检索&#xff0c;适用于大规模应用程序中的高效检索和访问。但在处理大量高分辨率图片…...

协变量的概念

协变量的概念 协变量的概念 协变量(Covariate)是在统计分析和研究中,与因变量(被研究的主要变量)相关,并且可能对因变量产生影响的其他变量。它不是研究的主要关注对象,但需要在分析过程中被考虑进去,因为它可能会混淆或改变自变量与因变量之间的关系。举例说明 教育研…...

【[LeetCode每日一题】Leetcode 1768.交替合并字符串

Leetcode 1768.交替合并字符串 题目描述&#xff1a; 给定两个字符串 word1 和 word2&#xff0c;以交替的方式将它们合并成一个新的字符串。即&#xff0c;第一个字符来自 word1&#xff0c;第二个字符来自 word2&#xff0c;第三个字符来自 word1&#xff0c;依此类推。如果…...

SRT协议学习

SRT(Secure Reliable Transport)协议是一种开源的视频传输协议&#xff0c;旨在提供安全&#xff0c;可靠&#xff0c;低延迟的视频流传输。以下是SRT协议的一些关键的工作原理。 1 安全传输&#xff0c;SRT通过使用AES加密和数据完整性验证来确保数据的安全传输。它可以在不信…...

南昌大学《2024年837自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《南昌大学873自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题...

Sketch MeaXure终极指南:如何快速生成专业设计规范

Sketch MeaXure终极指南&#xff1a;如何快速生成专业设计规范 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 你是否经历过这样的场景&#xff1f;精心设计完界面后&#xff0c;开发团队却反复询问"这个间距是多少…...

别再死记硬背了!用LabVIEW亲手搭建一个密码验证器,顺便搞懂字符串显示的4种模式

用LabVIEW打造密码验证器&#xff1a;解锁字符串显示的4种实战模式 在虚拟仪器技术的学习中&#xff0c;LabVIEW的字符串处理功能常常让初学者感到困惑。那些抽象的概念和枯燥的理论习题&#xff0c;如果能通过一个有趣的项目来理解&#xff0c;效果会大不相同。今天&#xff0…...

uniApp相机、存储、电话权限申请全攻略:告别频繁弹窗,提升用户体验

uniApp权限管理艺术&#xff1a;优雅实现相机、存储、电话权限的智能授权策略 在移动应用开发中&#xff0c;权限管理一直是开发者与用户之间的微妙博弈。过于频繁的权限请求会引发用户反感&#xff0c;而缺乏透明度的权限获取又可能导致应用商店审核失败。如何在uniApp框架下构…...

PLIC中断控制器深度解析:手把手实现RISCV多核中断调度(含设备树配置)

PLIC中断控制器深度解析&#xff1a;手把手实现RISCV多核中断调度&#xff08;含设备树配置&#xff09; 在物联网设备开发中&#xff0c;高效的中断处理机制往往是系统稳定性的关键。想象一下&#xff0c;当你设计的智能网关需要同时处理数十个传感器的数据流时&#xff0c;如…...

小参数模型逆袭:用调参trick超越大参数模型

总结&#xff1a;互联网中厂大厂&#xff0c;尤其是给你权限给你机器玩的&#xff0c;去&#xff0c;提升极大。小公司or普通研究院&#xff0c;非常一般。一段实习&#xff0c;通常需要满足一些前置的技术条件才能拿到offer。但offer只是开始&#xff0c;还需要自己有意识地在…...

【Linux开发】03Linux 线程同步:信号量(Semaphore)

一、问题&#xff1a;互斥量只能“锁”&#xff0c;不能“排队” 前面我们学习了互斥量&#xff0c;它可以解决多个线程同时访问共享资源的问题&#xff0c;保证同一时间只有一个线程进入临界区。但互斥量只能做到“互斥”&#xff0c;无法控制线程的执行顺序。 1.1 需要控制顺…...

SSC TOOL 5.13保姆级配置教程:手把手教你生成EtherCAT从站协议栈代码

SSC TOOL 5.13实战指南&#xff1a;从零构建EtherCAT从站协议栈 在工业自动化领域&#xff0c;EtherCAT因其卓越的实时性能和灵活的拓扑结构&#xff0c;已成为运动控制系统的首选通信协议。作为EtherCAT从站开发的核心工具&#xff0c;SSC TOOL 5.13能够将复杂的协议栈配置转化…...

打卡信奥刷题(3081)用C++实现信奥题 P7069 [NWRRC 2014] Joy of Flight

P7069 [NWRRC 2014] Joy of Flight 题目描述 大意就是一架飞机要从起点飞到终点&#xff0c;飞机有最大空速&#xff0c;飞行最大时间&#xff0c;给出风速的变化和风如何影响飞机飞行&#xff0c;求出飞机是否能到达终点&#xff0c;如果能就输出飞机的位置变化。 雅各布&…...

如何用XXMI启动器一键管理多游戏模组:告别文件混乱,享受整洁游戏体验

如何用XXMI启动器一键管理多游戏模组&#xff1a;告别文件混乱&#xff0c;享受整洁游戏体验 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为原神、星穹铁道、鸣潮等多款游…...

从显微图像到仿真模型:芯片逆向工程版图提取全流程实战解析

1. 芯片逆向工程入门&#xff1a;从显微图像开始 第一次接触芯片逆向工程时&#xff0c;我盯着显微镜下的芯片图像完全摸不着头脑。那些五彩斑斓的图层就像抽象画&#xff0c;直到导师告诉我这其实是现代集成电路的"身份证照片"。芯片逆向工程的核心&#xff0c;就是…...