LeetCode | Valid Palindrome

题目

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.

Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

分析与思路

题目比较简单,考察string一些常用函数的用法和ASCII表的一些知识。解题时要对字母和数字进行筛查,并且要注意不区分大小写。最后,注意题目规定空字符串也是合法的Palindrome。

思路很简单,定义两个游标i和j。i从0向后开始筛查每个字符,j则从最后一个字符开始向前筛查。如果发现合法字符(字母、数字)则进行对比,如果不同(同一字母的大小写认为是相同)则返回false,相同则继续。在筛查的时候一定要注意判断是否越界,我第一次提交的时候就是因为忘记了判断导致出错。最后,如果发现i>=j则返回true。

个人认为整个题目比较容易出错的地方主要有这么几个吧:
1)字母的筛查,要熟悉ASCII表,’Z‘后并不是紧跟着’a‘,中间还有’.‘ ’`‘等字符;
2)C++编程,一定要时刻记得判断是否越界;
3)空字符的处理。

OK,代码如下:

class Solution {
public:
    bool isAlphanumericCharacter(char c)
    {
    	//0:48  9:57  A:65  Z:90  a:97  z:122
    	unsigned short c_int = int(c);
    	if(c_int>47 && c_int<58)
    		return true;
    	else if(c_int>64 && c_int<91)
    		return true;
    	else if(c_int>96 && c_int<123)
    		return true;
    	else 
    		return false;
    }
    
    bool isPalindrome(string s) {
    	int length_s = s.length();
    	for(int i=0,j=length_s-1;i<j;i++,j--)
    	{
    		while(!isAlphanumericCharacter(s.at(i)))
    		{
    			i++;
    			if(i>=length_s)	break;
    		}
    		while(!isAlphanumericCharacter(s.at(j)))
    		{
    			j--;
    			if(j<0)	break;
    		}
    		if(i<j)
    		{
    			if(    (int(s.at(i) - s.at(j)) != 0) 
    				&& (int(s.at(i) - s.at(j)) != 32)
    				&& (int(s.at(i) - s.at(j)) != -32)
    			  )
    			return false;
    		}
    	}
    	return true;
    }
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值