LeetCode Valid Palindrome有効返信(文字列)

7289 ワード

 1 class Solution {

 2 public:

 3     bool isPalindrome(string s) {

 4     if(s=="")    return true;

 5     if(s.length()==1)    return true;    //

 6     char *p,*q;

 7     p=&s[0];                //p 

 8     q=&s[s.length()-1];        //q 

 9     while(p!=q){

10                 // , , 

11         while(    (*p<'0'    ||    (*p>'9'&&*p<'A')    ||    (*p>'Z'&&*p<'a')    ||    *p>'z')&&p!=q){        

12             p++;

13         }

14         while(    (*q<'0'    ||    (*q>'9'&&*q<'A')    ||    (*q>'Z'&&*q<'a')    ||    *q>'z')&&p!=q)    //

15             q--;

16         if(*q>='A'&&*q<='Z')    //

17             *q=*q+32;

18         if(*p>='A'&&*p<='Z')    //

19             *p=*p+32;

20         if(p==q)

21             break;

22         if(*p==*q){

23             p++;

24             if(p==q)

25                 break;

26             q--;

27         }

28         else

29             return false;

30     }

31     return true;

32     }

33 };        

タイトル:"A man, a plan, a canal: Panama"  is a palindrome.回文"race a car" is not a palindromeです.非回文
文字列を逆さにしても元と同じです.例えば、did=did
しかし、この問題では、数字やアルファベット以外の文字をフィルタリングし、大文字と小文字を区別せず、Aとaは同じです.
 
構想:2つのポインタで、文字列の頭と尾をそれぞれ指し、無効な文字をフィルタリングすると判断するたびに.
注意:空白列(アルファベットや数字がなく、スペース、句読点だけかもしれない)を考慮するには、1文字の文字列しかありません.2つのポインタが同じアドレスを指している場合、すでに返事であることも考慮しなければなりません.