LEETCODE 125

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


判断是否为回文串,一般是用双指针,一个指针从前遍历,一个从后遍历,如果不同,直接返回FALSE,如果相同,则同时前进。

本题需考虑:

大写和小写当成一样,则可以考虑为和大写A或者小写A的距离。(1)

由于还有数字,如果考虑数字到0的距离,会造成数字和大小写分不开的情况,则判断数字和‘\0’的距离(2)

遍历的时候,不是字母和数字,就直接跳过。(3)

class Solution {
public:
    bool isPalindrome(string s) {
      	int len = s.length();
		int be = 0, en = len - 1;
		char beg, fin;
		while (be <= en)
		{
			char beg = NULL, fin = NULL;
			for (int i = be; i <= en; ++i)
			{
				if (s[i] >= 'A' && s[i] <= 'Z' || s[i] >= 'a' && s[i] <= 'z')
				{
					beg = (s[i] >= 'A' && s[i] <= 'Z')? s[i] - 'A':s[i] - 'a';
					be = i;
					break;
				}
				else if (s[i] >= '0' && s[i] <= '9' )
				{
					beg = s[i] - '\0';
					be = i;
					break;
				}
			}
			for (int i = en; i >= be; --i)
			{
				if (s[i] >= 'A' && s[i] <= 'Z' || s[i] >= 'a' && s[i] <= 'z')
				{
					fin = (s[i] >= 'A' && s[i] <= 'Z')? s[i] - 'A':s[i] - 'a';
					en = i;
					break;
				}
				else if (s[i] >= '0' && s[i] <= '9' )
				{
					fin = s[i] - '\0';
					en = i;
					break;
				}
			}
			if (beg != fin)
			{
				return false;
			}
			++be;
			--en;
		}
		return true;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值