力扣-125. 验证回文串

news/发布时间2024/5/9 18:16:26

1. 题目

题目地址(125. 验证回文串 - 力扣(LeetCode))

https://leetcode.cn/problems/valid-palindrome/

题目描述

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

字母和数字都属于字母数字字符。

给你一个字符串 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 字符组成

2.题解

2.1 首尾双指针(回文)

思路

首先全部小写, 去除非字母字符, 在处理的时候我是直接对于题目给的string进行处理的, 使用了快慢指针的思想, 由于读到的字符总是快于我当前修改的位置,所以直接原地修改即可
然后使用首尾双指针遍历字符串即可!

代码

  • 语言支持:C++

C++ Code:


class Solution {
public:void removeExceptAlpha(string& s) {int i = 0, j = 0;while (j < s.size()) {if (isalnum(s[j])) {s[i++] = tolower(s[j]);}j++;}s.resize(i);}bool isPalindrome(string s) {removeExceptAlpha(s);int i = 0, j = s.length() - 1;while (i < j) {if (s[i++] != s[j--]) return false;}return true;}
};

复杂度分析

由于字符串是不可变的, 这里其实空间复杂度没有改变
令 n 为数组长度。

  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(n)\)

2.2 首尾双指针(优化空间复杂度为O(1))

思路

遇到不是字母数字字符, 就向后遍历跳过, 注意这里要防止越界, 判断l < r即可

代码

class Solution {
public:bool isPalindrome(string s) {int l = 0, r = s.length() - 1;while (l < r) {while(l < r && !isalnum(s[l])) l++;while(l < r && !isalnum(s[r])) r--;if(l < r){if(tolower(s[l]) != tolower(s[r])) return false;l++; r--;}}return true;}
};

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

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

相关文章

Fastbin attackDouble free和Unsortbin leak的综合使用

Fastbin attack&&Double free和Unsortbin leak的综合使用✅ 今天做一个综合题目,包括利用Fastbin attack实现多指针指向一个地址,以及利用Unsortbin leak泄露libc基地址和修改__malloc_hook地址为one_gadget 题目是buuctf上面的一道题目,题目链接 https://buuoj.cn/…

python学习思维导图分享

python 本文包含了我的一些python学习的笔记和思维导图 第一部分:python基础导图下载链接 第二部分:函数及其他文件操作导图下载链接 第三部分:类及网络编程导图下载链接 第四部分:mysql导图下载链接

微机结构

微型计算机结构 总体来说,微型计算机的结构是采用总线结构实现相互之间的信息传递。CPU和存储器通过总线相互连接,I/O设备通过I/O接口连接在总线上。 总线是计算机各部件之间传输数据的通道,有三类总线分别是:数据总线、地址总线和控制总线(反馈)。主要特性有:公共性、分…

京东web端h5st—4.7逆向分析

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6Ly93d3cuamQuY29tLw== 分析流程了解h5st 看了sha256相关加密算法逻辑b…

Games 101: 旋转矩阵

旋转矩阵 本文主要介绍了旋转矩阵的推导,分为两种方式:旋转坐标 旋转坐标轴 以下坐标系都是右手坐标系旋转坐标 已知坐标点\(A(x_a,y_a)\), 旋转\(\theta\)角后变为坐标点\(B(x_b,y_b)\),求解旋转矩阵.\[{\large \begin{align*} \begin{split} x_a &=r_a \cdot cos(\alp…

2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意

2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意的是,白色车可以垂直或水平移动,而白色象可以沿对角线移动,它们不能跳过其他棋子。…