新闻中心

c++怎么判断一个字符串是回文串_c++回文字符串检测算法

2025-11-03
浏览次数:
返回列表
回文串判断核心是忽略大小写、空格和非字母数字字符后,用双指针从两端比较字符是否相等。1. 基本方法使用双指针跳过非法字符并转小写比较;2. 简单版本适用于纯字母字符串,直接对称比较;3. 预处理方法构造干净字符串再判断,逻辑清晰但耗空间;4. 推荐第一种,高效实用,如"A man, a plan, a canal: Panama"返回true,"race a car"返回false。

c++怎么判断一个字符串是回文串_c++回文字符串检测算法

判断一个字符串是否为回文串,核心思路是:忽略大小写、空格和非字母数字字符后,从两头向中间逐个比较字符是否相等。如果全部匹配,则是回文串。

1. 基本回文判断(仅字母数字,忽略大小写)

先处理原字符串,只保留字母和数字,并统一转为小写,然后用双指针从两端向中间扫描。

示例代码:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
<p>bool isPalindrome(const string& s) {
int left = 0;
int right = s.length() - 1;</p><pre class='brush:php;toolbar:false;'>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;

}

说明:使用 isalnum() 判断是否为字母或数字,tolower() 统一转小写,避免大小写影响判断。

2. 简单版本(仅纯字符串,无特殊字符)

如果已知字符串只包含字母且无需处理空格或符号,可以直接双指针比较。

bool isSimplePalindrome(const string& s) {
    int n = s.length();
    for (int i = 0; i < n / 2; i++) {
        if (s[i] != s[n - 1 - i])
            return false;
    }
    return true;
}

适用场景:输入干净,如 "level"、"radar" 等。

Musho Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho

3. 使用额外空间预处理字符串

也可以先构造一个只含字母数字的小写字符串,再判断是否对称。

bool isPalindromeWithCopy(const string& s) {
    string cleaned;
    for (char c : s) {
        if (isalnum(c)) {
            cleaned += tolower(c);
        }
    }
<pre class='brush:php;toolbar:false;'>int n = cleaned.length();
for (int i = 0; i < n / 2; i++) {
    if (cleaned[i] != cleaned[n - 1 - i])
        return false;
}
return true;

}

优点:逻辑清晰;缺点:多用 O(n) 空间。

4. 测试示例

int main() {
    cout << isPalindrome("A man, a plan, a canal: Panama") << endl; // 1 (true)
    cout << isPalindrome("race a car") << endl;                     // 0 (false)
    cout << isPalindrome("Was it a car or a cat I saw?") << endl;   // 1 (true)
    cout << isSimplePalindrome("hello") << endl;                    // 0 (false)
    cout << isSimplePalindrome("madam") << endl;                    // 1 (true)
    return 0;
}

基本上就这些。根据输入情况选择合适方法。日常推荐使用第一种双指针跳过非法字符的方式,效率高且实用。

以上就是c++++怎么判断一个字符串是回文串_c++回文字符串检测算法的详细内容,更多请关注其它相关文章!


# 相关文章  # 上海交大关键词排名查询  # 东营如何建设网站优化  # 深圳seo前端优化  # 淮北seo公司到9火星  # 鞍山关键词排名的好方法  # 容声冰箱网站建设工作  # 茂名网站建设银行工作  # 青海关键词排名优化咋做  # 天津靠谱seo外包  # 常规营销推广诚信服务  # 中文网  # ai  # 适用于  # 推荐使用  # 则是  # 边缘  # 判断是否  # 第一种  # 游戏开发  # 跳过  # stream  # ios  # c++ 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 网站内容防复制粘贴的实现策略与局限性  俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  12306选座如何查看座位示意图_12306座位示意图解读与使用  Pandas DataFrame:高效添加条件计算列  在WordPress中通过REST API获取BasicAuth保护的远程文章  b站如何看历史记录_b站观看历史找回方法  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  晋江读书网页版在线登录 晋江读书电脑版官网  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  12306选座怎么选到商务座_12306商务座选择与配置说明  Spyder启动失败:字体文件权限拒绝错误解决方案  LINUX怎么设置定时任务_LINUX crontab配置教程  J*aScript实现单选按钮与关联输入框的联动禁用教程  Django模型中自动计算可用余额的实现方法  微博网页版直接访问 微博网页版账号管理快速入口  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  J*aScript异步迭代器_j*ascript异步遍历  Safari自带网页翻译功能怎么用 无需插件轻松看懂外文网站【方法】  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧  手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  AO3网页版合集入口 Archive of Our Own同人作品浏览指南  React/Next.js中实现列表项的动态选择与移动  qq游戏跨平台入口_qq游戏多设备同步登录  将HTML Canvas内容转换为可上传的图像文件(File对象)  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  快速CSGO开箱网站指南 CSGO开箱平台推荐  Golang如何使用net/url解析URL_Golang URL解析与处理方法  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  CSS图片焦点样式实现教程:理解与应用tabindex属性  DLsite中文平台入口 DLsite官网内容在线查看  C++指针和引用有什么区别_C++内存管理核心概念深度解析  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  2026年CSGO开箱网站推荐 CSGO开箱平台精选  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  支付宝如何设置安全保护_支付宝安全设置的全面教程  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度 

搜索