如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s
,如果它是 回文串 ,返回 true
;否则,返回 false
算法逻辑,该算法需要遍历整个字符串查看其是否为回文串
输入为一个字符串,输出为一个布尔值
这个算法使用了双指针的方法进行判断
第一步,设定双指针,第一个指针指向字符串的开头,另一个指针指向字符串的结尾,字符串的长度可以通过size()方法获得
第二步,判断语句,在左指针地址小于右指针地址时,循环语句开始
第三步,在循环语句中,左指针指向的数不是一个字母或者数字时时,左指针加一
判断方法使用函数 std ::isalnum()函数,当指向的为一个字母或者数字,返回true
同理,此时右指针指向的数为一个数字字母时,右指针减一
第四步,比较两个字符数字,首先使用std::tolower()方法将字符统一转为小写字符,当这两个字符不相同时,直接return False
第五步 遍历完整个字符串,若是没有出现False则return true
#include <cctype>
#include <string>
class Solution {
public:
bool isPalindrome(std::string s) {
int left = 0, right = s.size() - 1;
while (left < right) {
// 将左指针移动到下一个字母数字字符
while (left < right && !std::isalnum(s[left])) {
left++;
}
// 将右指针移动到前一个字母数字字符
while (left < right && !std::isalnum(s[right])) {
right--;
}
// 比较字符
if (std::tolower(s[left]) != std::tolower(s[right])) {
return false;
}
left++;
right--;
}
return true;
}
};