LeetCode 125. 验证回文串 | C++语言版
LeetCode 125. 验证回文串
题目描述
题目地址:125. 验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
解题思路
思路一:使用内置函数
代码实现
C++
class Solution {
public:
bool isPalindrome(string s) {
//输入: s = "A man, a plan, a canal: Panama" 输出:true
//使用C++内置函数
//定义一个新数组
string newS;
for(auto ch:s){
//islower() 判断字符是否是小写字母
//isdigit() 判断字符是否是数字
//isupper() 判断字符是否是大写字母
//tolower() 将字符转换成小写字母
//移除非字母字符,字母和数字都属于字母数字字符
if(islower(ch) || isdigit(ch)){
newS+=ch;
}else if(isupper(ch)){
newS+=tolower(ch);
}
}
//再次定义一个新数组,用来存储反转后的字符串
string reverseS=newS;
//反转字符串
reverse(reverseS.begin(),reverseS.end());
//比较比较字符串和反转的字符串是否相同
return (newS.compare(reverseS)==0);
}
};
在这里插入代码片
运行结果
参考文章:
思路二:使用双指针
代码实现
C++
class Solution {
public:
bool isPalindrome(string s) {
//输入: s = "A man, a plan, a canal: Panama" 输出:true
//使用双指针
if(s.length()<=1) return true;
//左指针
int left=0;
//右指针
int right=s.length()-1;
//isalnum() 判断字符是否是字母或数字
//tolower() 将字符转换成小写字母
while(left<right){
// 如果左指针指向的字符不是字母或数字,则左指针向右移动一位
while(left < right && !isalnum(s[left])) left++;
// 如果右指针指向的字符不是字母或数字,则右指针向左移动一位
while(left < right && !isalnum(s[right])) right--;
if(tolower(s[left])!=tolower(s[right])) return false;
// 如果不存在上述情况,那么就是正常的在进行比较,即每次的字母或数字前后对应都一样,到最后left=right跳出循环,满足回文
left++;
right--;
}
return true;
}
};
在这里插入代码片