Keshawn_lu's Blog

Leetcode 125. 验证回文串

字数统计: 327阅读时长: 1 min
2020/06/19 Share

题目简介:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

1
2
输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

1
2
输入: "race a car"
输出: false

思路:

由于不考虑大小写的问题,使用transform()函数将字符串中的字符都转换为大写。

利用双指针,初始化指向字符串的开头和末尾,由于只考虑数字和字母,所以指针指向的值不为数字和字母的话,便向后或向前移动,直至找到数字或字母即可。

tips:

  • 注意边界的问题
  • 学会isalpha()isdigit()函数,方便判断
  • transform()函数的定义transform(s.begin(), s.end(), s.begin(), ::toupper)便将字符串中的字符都转化为大写。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
bool isPalindrome(string s) {

int left = 0;
int right = s.length() - 1;

//转换为大写
transform(s.begin(), s.end(), s.begin(), ::toupper);

while(left < right){

while(left < s.length() && !isalpha(s[left]) && !isdigit(s[left]))
left++;
while(right >= 0 && !isalpha(s[right]) && !isdigit(s[right]))
right--;

if(left < right && s[left] != s[right])
return false;

left++;
right--;
}

return true;

}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: