LeetCode第125题解析

2023-11-17

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

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

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:

输入: "race a car"
输出: false

  1. islower(char c) 是否为小写字母
  2. isupper(char c) 是否为大写字母
  3. isdigit(char c) 是否为数字
  4. isalpha(char c) 是否为字母
  5. isalnum(char c) 是否为字母或者数字
  6. toupper(char c) 字母小转大
  7. tolower(char c) 字母大转小
  8. 大小写字母的ASCII码值:a-z:97-122;A-Z:65-90。相差32。

第一种方法:先将字符串处理成有效字符串,包括删除数字和字母以外的字符,并且转换成统一的大小写。在利用rbeginrend逆序输出字符串(string tmp(s.rbeing( ), s.rend( ))),最后进行比较即可。

class Solution {
public:
    bool isPalindrome(string s) {
        string tmp;
        //处理字符串
        for (char c : s) {
            if (isalnum(c)) {
                tmp += tolower(c);
            }
        }
        //比较处理后的字符串是否是回文串
        //逆序输出后进行比较
        string tmp1(tmp.rbegin(), tmp.rend());
        return tmp == tmp1;
    }
};

第二种方法:双指针法。可以处理字符串后进行双指针法,也可以指针在原字符串上进行双指针法。

class Solution {
public:
    bool isPalindrome(string s) {
        string tmp;
        //处理字符串
        for (char c : s) {
            if (isalnum(c)) {
                tmp += tolower(c);
            }
        }
        //比较处理后的字符串是否是回文串
        //利用双指针法
        int i = 0;
        int j = tmp.size() - 1;
        for ( ; i < j; ++i) {
            if (tmp[i] != tmp[j])
                return false;
            j--;
        }
        return true;
    }
};

直接在原字符串上利用双指针法:

class Solution {
public:
    bool isPalindrome(string s) {
        int left = 0;
        int right = s.size() - 1;
        while(left < right) {
            while (left < right && !isalnum(s[left])) {
                left++;
            }

            while (left < right && !isalnum(s[right])) {
                right--;
            }

            if (tolower(s[left]) != tolower(s[right]))
                return false;
            left++;
            right--;
        }
        return true;
    }
};

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode第125题解析 的相关文章

  • 安全(六种核心安全机制-加密、密钥、签名与证书)

    安全要解决什么问题 你都会的密码术 安全机制之对称加密 安全机制之非对称加密 安全机制之密钥交换 安全机制之消息摘要 安全机制之电子签名 安全机制之证书与PKI 一 在典型的场景中 安全主要用于解决4类需求 1 保密 Security Co

随机推荐

  • Load balancer does not have available server for client问题

    Load balancer does not have available server for client问题 是因为消费端没有调用成功服务端 下面四步是必备的 可以检查一番 1 写nacos发现的启动类注解 SpringBootApp
  • statsmodels 笔记:seasonal_decompose 时间序列分解

    1 使用方法 statsmodels tsa seasonal seasonal decompose x model additive filt None period None two sided True extrapolate tre
  • [Nowcoder / POJ2728] 最优比率生成树

    Nowcoder链接 POJ链接 题目描述 David the Great has just become the king of a desert country To win the respect of his people he d
  • 单例模式的6种实现方式

    单例模式的6种实现方式 一 单例模式的定义 定义 确保一个类只有一个实例 并提供该实例的全局访问点 这样做的好处是 有些实例 全局只需要一个就够了 适用单例模式就可以避免一个全局适用的类 频繁的创建和销毁 耗费系统资源 二 单例模式的设计要
  • C++函数指针应用例子

    C 函数指针应用例子 前段时间在写代码的时候 想让程序根据一个函数运行出的结果 从四个函数中自动选择一个函数运行 这四个函数我们就取名叫 value 0 value 1 value 2 value 3 假设value 0是这样的 int v
  • 基于Android系统英语学习助手APP设计开发

    一 设计思路 1 1设计目标 1 2设计思路 1 3设计内容 1 3 1界面设计 1 3 2功能模块设计 1 3 3功能流程图 1 3 4数据库设计 如果没有数据库这部分删除 1 4工具设备要求 1 5技术方案 二 设计过程与说明 2 1技
  • JVM 内存分析—优化

    参考链接 https www jianshu com p c6e2abb9f657 JVM及GC https blog csdn net sltylzx article details 90704205 在Eclipse上安装MAT Mem
  • kafka学习指南(总结版)

    版本介绍 从使用上来看 以0 9为分界线 0 9开始不再区分高级 低级消费者API 从兼容性上来看 以0 8 x为分界线 0 8 x不兼容以前的版本 总体拓扑架构 从上可知 1 生产者不需要访问zookeeper 2 消费者fetch消息
  • 利用PDB文件将蛋白中的单聚体利用对称矩阵转换为二聚体

    下面是需要在VMD中执行的tcl脚本 steps source mono2poly tcl mol delete all mol new filename pdb set sel atomselect top all set matrix
  • Divide by three, multiply by two CodeForces - 977D(dfs vector记录答案并利用vector回溯)

    em 虽然自己想到了dfs回溯解决这个问题 结果却咋实现 记录答案但是如果答案不对 答案也要回溯 这个问题上翻了车 原谅菜鸡我没有想到可以直接v pop back em 以前基本没用过这个功能 这里记录一下 参考了大佬代码 AC代码 inc
  • Java 通过HttpURLConnection Post方式提交json,并从服务端返回json数据

    这个技术和xml差不过 主要是服务端代码稍微修改 客户端代码修改部分传递参数就可以完成 但在之前需要导入json所需要的jar包 PostJson java代码 package PostPager import java io InputS
  • torch.sigmoid() 与 torch.nn.Sigmoid() 对比 python

    1 torch sigmoid 2 torch nn Sigmoid 只看文档 我没太看出二者的具体区别 通过以下可知得到结果自然相同 不过使用方式确实不同 我目前也没明白为啥
  • vscode 添加万能头文件#include<bits/stdc++.h>

    文章目录 前言 配置 前言 有一天我在愉快的刷着leetcode 突然觉得写头文件好TM麻烦 于是就想着配置一下万能头文件 配置的过程我觉得还是记录一下吧 很多初学者可能会犯迷糊 配置 首先 我们要清楚 我们在vscode上写C C 程序的
  • 给element datetimepicker 设置默认当前时间

    else里面就是设置默认当前时间15分钟后 watch row val this liveTime 当时间不为空时才回显 if val liveBeginTime val liveEndTime this liveTime push new
  • 阿里云P2P内容分发网络(PCDN)实操手册

    一 PCDN是定义 P2P 内容分发网络 英文名 P2P CDN 以下简称PCDN 是以P2P技术为基础 通过挖掘利用电信边缘网络海量碎片化闲置资源而构建的低成本高品质内容分发网络服务 客户通过集成PCDN SDK 以下简称SDK 接入该服
  • 关于scroll和mousewheel事件的问题

    需要注意的点 火狐的鼠标滚轮事件是DOMMouseScroll 事件参数兼容 e window event e 下面省略 preventDefault 函数取消的是默认事件 不会把我们自己添加的事件处理删除 实验开始 在下面验证例子的基础上
  • Android仿网页分页效果

    比较简单的一个方法 使用gridview来做的效果 1 在adapter中的getCount中判断list size是否你需要显示的长度 小于使用list size大于使用你需要的长度 我这里的长度为10 所以判断的为10 2 在adapt
  • 深度学习的核心理念

    深度学习的方法 核心是拟合 拟合的意思 是指在一个被定义的度量空间里 用一个函数 比较准确地表示一堆现有的空间数据 让拟合后误差尽量变小 贴合的越近越好 为何又说深度学习是统计呢 这个观点 跟拟合是同一个意思的不同表述 一理各表 在一个 给
  • GIoU详解

    Generalized Intersection over Union A Metric and A Loss for Bounding Box Regression 一 动机 在目标检测任务中 回归loss相同的情况下 IoU却可能大不相
  • LeetCode第125题解析

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