过去的损失和失败经验,应是你采取行动,而非不采取行动的理由。

题目描述:

验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false

解题代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
bool isPalindrome(string s) {
int i = 0,j = s.size() - 1;
while(i < j){
while(!isalpha(s[i]) && i < j && !isdigit(s[i])){
i++;
}
while(!isalpha(s[j]) && i < j && !isdigit(s[j])){
j--;
}
if(tolower(s[i]) != tolower(s[j])){
return false;
}else{
i++;
j--;
}
}
return true;
}
};

image-20231026211742662

解读与收获:

简单题,思路也比较简单,双指针,一个从头开始便利,一个从尾开始遍历。中途如果遇到不是字母或数字的元素,则i++,同理j–,直到遇到可以比较的,如果相同则继续往后比较,不同直接返回false。

isalpha 用来判断是不是字母

isdigit 判断是否是数字

tolower 将字母转化为小写

toupper 字母转化为大写