leetCode题解之判断一个句子中的字符和数字是否构成回文

本文介绍了一种高效判断字符串是否为回文的方法,通过忽略非字母数字字符并比较首尾字符来实现。提供了详细的算法思路及C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题描述

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.

 

输入一个字符串,判断这个字符中所有的数字和字母字符是否是回文,大小写相同。

如果空字符串是回文字符串。

 

2、问题分析

   首先想到的是可以将该字符串中的所有的数字和字母放入一个 string 或者vector ,然后判断,这样需要额外申请空间。

  第二种方法是直接使用两个指针,一个向前遍历,一个向后遍历。遇到非字符和数字则跳过,遇到字符和数字则判断。

 

3、代码

 1 bool isPalindrome(string s) {
 2         if( s.size() == 0 )
 3         {
 4             return true;
 5         }
 6         
 7     for(int i = 0,j = s.size()-1; i < j;i++,j--)
 8     {
 9         while( !isalnum(s[i]) && i < j) i++;
10         while( !isalnum(s[j]) && i < j) j--;
11         if(toupper(s[i]) != toupper(s[j]) )
12             return false;
13     }
14         
15         return true;
16         
17         
18     }

 

转载于:https://www.cnblogs.com/wangxiaoyong/p/8669495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值