每日一练(40):验证回文串

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

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


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


示例 1:


输入: "A man, a plan, a canal: Panama"

输出: true


解释:"amanaplanacanalpanama" 是回文串


示例 2:


输入: "race a car"

输出: false


解释:"raceacar" 不是回文串


提示:


1 <= s.length <= 2 * 105


字符串 s 由 ASCII 字符组成


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:字符串预处理 + 双指针


思路分析


isalnum:判断字符变量c是否为字母或数字,若是则返回非零,否则返回零。

tolower:把字母字符转换成小写,非字母字符不做出处理


1.先把字符串s做处理


2.双指针判断,左指针指向第一个位置,右指针指向最后一个位置,依次判断是否相同


bool isPalindrome(string s) {
    string str;
    for (const char &ch : s) {
        if (isalnum(ch)) {
            str.push_back(tolower(ch));// 将数字和字母保存在 str 中,大写字母转换成小写
        }
    }
    // 左指针指向第一个位置,右指针指向最后一个位置
    // 依次比较是否相同
    int l = 0, r = str.size() - 1;
    while (l < r) {
        if (str[l] != str[r]) {
            return false;
        }
        l++;
        r--;
    }
    return true;
}


方法二:筛选 + 判断


思路分析


对字符串 s 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串 sgood 中。这样我们只需要判断 sgood 是否是一个普通的回文串即可


使用语言中的字符串翻转 API 得到 sgood 的逆序字符串 sgood_rev


bool isPalindrome(string s) {
    string sgood;
    for (const char &ch : s) {
        if (isalnum(ch)) {
            sgood.push_back(tolower(ch));// 将数字和字母保存在 sgood 中,大写字母转换成小写
        }
    }
    string sgood_rev(sgood.rbegin(), sgood.rend());// API逆转字符串
    return sgood == sgood_rev;
}


目录
相关文章
(leetcode)二叉树最大深度
(leetcode)二叉树最大深度
131 0
|
6月前
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
1579 26
|
10月前
|
Web App开发 编解码 Linux
像素流送的这些问题困扰你了吗?
使用UE引擎开发的模型在移动端或网页推流时,像素流送是常见选择。然而,在实际应用中,用户经常遇到各种问题。小芹整理了网上关于像素流送的常见问题,分为两大类:一是使用过程中遇到的技术难题,二是对某些功能的实现和可行性不清楚。本文将详细探讨这些问题,帮助开发者更好地理解和解决像素流送中的常见问题。
341 3
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】金融数据分析中的机器学习应用
【4月更文挑战第30天】本文探讨了机器学习在金融数据分析中的应用,如股价预测、信用评分、欺诈检测、算法交易和风险管理,并以Python为例展示了如何进行股价预测。通过使用机器学习模型,金融机构能更准确地评估风险、识别欺诈行为并优化交易策略。Python结合scikit-learn库简化了数据分析过程,助力金融从业者提高决策效率。随着技术发展,机器学习在金融领域的影响力将持续增强。
907 0
|
JavaScript
|
自然语言处理 监控 机器人
自然语言处理中的语义理解和生成技术
【8月更文第18天】自然语言处理(NLP)是计算机科学的一个重要分支,其目标是使计算机能够理解、解析和生成人类语言。近年来,基于Transformer架构的预训练模型(如BERT、GPT系列)已经极大地推动了NLP的发展。本文将探讨这些模型在对话系统、文本生成、情感分析等领域的应用,并讨论相关技术挑战。
694 1
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
159 3
|
NoSQL 网络协议 Java
Redis客户端Lettuce深度分析介绍(上)
Spring Boot自2.0版本开始默认使用Lettuce作为Redis的客户端(注1)。Lettuce客户端基于Netty的NIO框架实现,对于大多数的Redis操作,只需要维持单一的连接即可高效支持业务端的并发请求 —— 这点与Jedis的连接池模式有很大不同。同时,Lettuce支持的特性更加全面,且其性能表现并不逊于,甚至优于Jedis。本文通过分析Lettuce的特性和内部实现(基于6.0版本),及其与Jedis的对照比较,对这两种客户端,以及Redis服务端进行深度探讨。
102979 8
|
机器学习/深度学习 API 算法框架/工具
Keras创建ANN模型的四种方法
这里以MNIST数据集来介绍Keras创建人工神经网络模型的四种方法
522 0
Keras创建ANN模型的四种方法