Valid Palindrome【leetcode】


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.


判断一个字符串是不是回文串。

这道题目不是很难,但是需要注意的细节却很多,我一共提交了6、7次才ac,每次都是一点点小问题,看来时间长不写代码是不行的啊


设置两个指针,left和right,分别指向字符串的左边和右边,然后遍历,直到left >right,循环结束

bool isChar(char c)
{ 
	//此函数出现的问题
	// 最开始写作 c>='0' && c <='10'   其中是没有'10'这个字符的!!!
	/*也可以这样
	if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
	return true;
	else
	{
	return false;
	}
	*/
	if (c >= '0' && c < '9')
		return true;
	else if (c >= 'a'&&c <= 'z')
		return true;
	else if (c >= 'A'&&c <= 'Z')
		return true;
	else
		return false;
}

char getLowercase(char c){
 	
	if (c >= 'A' && c <= 'Z')
		return (c + 32);
	else
		return c;
}


bool isPalindrome(string s) {

	/*需要考虑的情况:
	1.空串
	2.非空串,但是没字符或者数字的串,如“,。”
	3.数字的ascii码不是 0~9  而是‘0’ ~‘9’
	*/
	if (s.empty()){
		return true;
	}
	int left = 0;
	int right = s.size() - 1;

	while (left < right)
	{
		while (!isChar(s[left]) && left<right){
			left++;
		}
		//find left 
		while (!isChar(s[right]) && left<right){
			right--;
		}
		//find right

		if (left > right)//这里,对于‘,.’这样的判断
			return false;

		if (getLowercase(s[left]) == getLowercase(s[right])){
			left++;
			right--;
		}
		else{
			return false;
		}
	}
	return true;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值