[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.
题意:给定字符串,判断是否为回文。值得注意的是,只考虑字符和数字且不考虑字符大写小,其他情况忽略。
思路:判断是否为回文的情况,一般都是用两个指针,从字符串的两端开始向中间移动,若对应位置的字符不等则返回false。这里的区别在于,有空格和符号,而这些都是题中要求忽略的,所以,每当遇到空格和符号时,直接跳过就行,反应在代码上就是一个加加,一个减减;还有一点就是,这里是不考虑大小写的,所以需要写一个函数,遇到大写的时候转化成小写去比较(也可以小转大),其他不变。代码如下:
1 class Solution { 2 public: 3 bool isPalindrome(string s) 4 { 5 int len=s.size(); 6 if(len==0) return true; 7 8 int l=0,r=len-1; 9 while(l<r) 10 { 11 if( !isAlpnum(s[l])) 12 l++; 13 else if( !isAlpnum(s[r])) 14 r--; 15 else if(toLower(s[l]) !=toLower(s[r])) 16 return false; 17 else 18 { 19 l++; 20 r--; 21 } 22 } 23 return true; 24 } 25 26 bool isAlpnum(const char c) 27 { 28 if('A'<=c&&c<='Z') 29 return true; 30 else if('a'<=c&&c<='z') 31 return true; 32 else if('0'<=c&&c<='9') 33 return true; 34 return false; 35 } 36 37 char toLower(const char c) 38 { 39 if('A'<=c&&c<='Z') 40 return c+32; 41 return c; 42 } 43 };