Skip to content

Latest commit

 

History

History
43 lines (38 loc) · 704 Bytes

File metadata and controls

43 lines (38 loc) · 704 Bytes
  • 用双指针从两侧往中间移动,如果其中出现两侧不等的情况,则不是回文串
abcddba
|     |
l     r

abcddba
 |   |
 l   r

abcddba
  | |
  l r
不等,因此不是回文串
  • 题目只考虑字母和数字字符,忽略大小写,对这些情况进行处理即可
class Solution {
 public:
  bool isPalindrome(string s) {
    int l = 0;
    int r = size(s) - 1;
    while (l < r) {
      while (l < r && !isalnum(s[l])) {
        ++l;
      }
      while (l < r && !isalnum(s[r])) {
        --r;
      }
      if (toupper(s[l]) == toupper(s[r])) {
        ++l;
        --r;
      } else {
        return false;
      }
    }
    return true;
  }
};