1. 题目链接:125. 验证回文串
2. 题目描述:
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串
s
,如果它是 回文串 ,返回true
;否则,返回false
。示例 1:
输入: s = "A man, a plan, a canal: Panama" 输出:true 解释:"amanaplanacanalpanama" 是回文串。
示例 2:
输入:s = "race a car" 输出:false 解释:"raceacar" 不是回文串。
示例 3:
输入:s = " " 输出:true 解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。 由于空字符串正着反着读都一样,所以是回文串。
提示:
1 <= s.length <= 2 * 105
s
仅由可打印的 ASCII 字符组成
3. 解法:
算法思路:
- 创建一个空字符串
sgood
,用于存储处理后的字符。 - 遍历输入字符串中的每个字符。
- 如果字符是字母或数字,则将其转换为小写并添加到
sgood
中。 - 创建一个新字符串
sgood_rev
,将sgood
中的字符反转后存储。 - 比较
sgood
和sgood_rev
是否相等,如果相等则返回true
,否则返回false
。
isalnum()
是 C++ 中的一个函数,用于检查一个字符是否是字母或数字。如果字符是字母或数字,函数返回true
,否则返回false
。
tolower()
是 C++ 中的一个函数,用于将大写字母转换为小写字母。如果字符已经是小写或不是字母,则返回原字符。
C++算法代码:
class Solution {
public:
// 判断给定字符串是否为回文串
bool isPalindrome(string s) {
// 创建一个空字符串,用于存储处理后的字符
string sgood;
// 遍历输入字符串中的每个字符
for(char ch:s)
{
// 如果字符是字母或数字,则将其转换为小写并添加到sgood中
if(isalnum(ch))
{
sgood+=tolower(ch);
}
}
// 创建一个新字符串,将sgood中的字符反转后存储
string sgood_rev(sgood.rbegin(),sgood.rend());
// 比较sgood和sgood_rev是否相等,如果相等则返回true,否则返回false
return sgood==sgood_rev;
}
};