题目描述
给定一个字符串,确定它是否是回文,只考虑字母、数字并忽略其他字符情况。
例如,
”A man, a plan, a canal: Panama” 是一个回文。
“race a car”不是回文。
ps:空字符串定义为有效的回文。
解题思路
构建两个指针,一头一尾夹逼
解题算法
/***************************************************
Author:tmw
date:2018-4-22
***************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
bool isNumberChar( char ch )
{
if( (ch>='0'&&ch<='9') || (ch>='a'&&ch<='z') || ( ch>='A'&&ch<='Z' ) )
return true;
else
return false;
}
bool ischar( char ch )
{
if( (ch>='a'&&ch<='z') || ( ch>='A'&&ch<='Z' ) )
return true;
else
return false;
}
/**
构建两个指针,一头一尾夹逼
时间复杂度O(n),空间复杂度O(1)
**/
bool isPalindrome(char* s)
{
int left = 0;
int right = strlen(s)-1;
/**空串和单串为回文**/
if( right<=left )
return true;
while( left < right )
{
while( left < right && (!isNumberChar(s[left])) )
left++;
while( left < right && (!isNumberChar(s[right])) )
right--;
if( s[left] == s[right] || (abs(s[left]-s[right]) == 'a'-'A')&&ischar(s[left])&&ischar(s[right]))
{
left++;
right--;
}
else
return false;
}
return true;
}
梦想还是要有的,万一实现了呢~ヾ(◍°∇°◍)ノ゙~~~~