【C++习题】5.验证一个字符串是否是回文
题目:
链接🔗:验证一个字符串是否是回文
题目:
代码:
class Solution {
public:
// 判断字符是否为字母或数字
bool isLetterOrNumber(char ch)
{
return (ch >= '0' && ch <= '9')
|| (ch >= 'a' && ch <= 'z')
|| (ch >= 'A' && ch <= 'Z');
}
// 判断字符串是否为回文
bool isPalindrome(string s) {
// 先小写字母转换成大写,再进行判断
for(auto& ch : s)
{
if(ch >= 'a' && ch <= 'z')
ch -= 32;// 将小写字母转换为大写
}
int begin = 0, end = s.size()-1;// 初始化双指针,分别指向字符串的开始和结束位置
while(begin < end)// 当双指针未相遇时继续循环
{
while(begin < end && !isLetterOrNumber(s[begin]))// 移动左指针,直到它指向字母或数字
++begin;
while(begin < end && !isLetterOrNumber(s[end]))// 移动右指针,直到它指向字母或数字
--end;
if(s[begin] != s[end])// 比较左右指针指向的字符是否相等
{
return false;// 如果不相等,说明不是回文
}
else
{
++begin; // 如果相等,移动指针继续比较
--end;
}
}
return true;// 如果所有字符都相等,说明是回文
}
};
注意:
我们要实现的是:给你一个字符串
s
,如果它是 回文串 ,返回true
;否则,返回false
。而:如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。这个东西是回文串的描述,不需要实现!