https://leetcode.com/problems/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.
“手动”判断public class Solution
{
public bool IsPalindrome(string s)
{
if (s == null)
return true;
int p1 = 0, p2 = s.Length - 1;
while (p1<p2)
{
while (!isAlphanumeric(s[p1]) && p1 < p2)
p1++;
while (!isAlphanumeric(s[p2]) && p1 < p2)
p2--;
if (!((s[p1] == s[p2])|| isEqual(s[p1],s[p2]) || isEqual(s[p2], s[p1])))
return false;
p1++;
p2--;
}
return true;
}
private bool isAlphanumeric(char c)
{
if ((48 <= c && c <= 57) || (65 <= c && c <= 90) || (97 <= c && c <= 122))
return true;
return false;
}
private bool isEqual(char c1, char c2)
{
if (65 <= c1 && c1 <= 90 && c2 == c1 + 32)
return true;
return false;
}
}
使用内置char函数
public bool IsPalindrome(string s)
{
if (s == null)
return true;
int p1 = 0, p2 = s.Length - 1;
while (p1<p2)
{
while (!Char.IsLetterOrDigit(s[p1]) && p1 < p2)
p1++;
while (!Char.IsLetterOrDigit(s[p2]) && p1 < p2)
p2--;
if (Char.ToLower(s[p1])!= Char.ToLower(s[p2]))
return false;
p1++;
p2--;
}
return true;
}