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つのポインタが同じアドレスを指している場合、すでに返事であることも考慮しなければなりません.