C++面试题和笔试题(五)-手撕代码篇

一、编程题

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

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

示例1:

输入:‘A man,a pla, a canal:Panama"

输出:true

解释:“amanaplanacanalpana ma"是回文串

示例2:

输入:“race a car"

输出:false

解释:"raceacar"不是回文串

提示:

1<=s.length<=2*105

字符串s由ASCII字符组成

请作答:

#include <iostream>  
#include <string>  
#include <cctype>  
  
using namespace std;  
  
bool isPalindrome(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--;  
        }  
  
        // 转换为小写进行比较  
        char leftChar = tolower(s[left]);  
        char rightChar = tolower(s[right]);  
  
        if (leftChar != rightChar) {  
            return false;  
        }  
  
        left++;  
        right--;  
    }  
  
    return true;  
}  
  
int main() {  
    string s1 = "A man,a plan,a canal:Panama";  
    string s2 = "race a car";  
  
    cout << isPalindrome(s1) << endl;  // 输出: true  
    cout << isPalindrome(s2) << endl;  // 输出: false  
  
    return 0;  
}

这道题的考点主要集中在以下两个方面:

  1. <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值