首页 > 后端开发 > C++ > 正文

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

冰火之心
发布: 2025-11-03 17:20:02
原创
405人浏览过
回文串判断核心是忽略大小写、空格和非字母数字字符后,用双指针从两端比较字符是否相等。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() 统一转小写,避免大小写影响判断。

立即学习C++免费学习笔记(深入)”;

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

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

阿里云-虚拟数字人
阿里云-虚拟数字人

阿里云-虚拟数字人是什么? ...

阿里云-虚拟数字人 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" 等。

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++回文字符串检测算法的详细内容,更多请关注php中文网其它相关文章!

相关标签:
c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号