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

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

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

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

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

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

示例代码:

#include #include #include using namespace std;

bool isPalindrome(const string& s) {int left = 0;int right = s.length() - 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;

}

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

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

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);        }    }
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++回文字符串检测算法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1482276.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 06:14:01
下一篇 2025年12月19日 06:14:14

相关推荐

发表回复

登录后才能评论
关注微信