问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果
代码描述
思路:扫描原字符串,将小写字母和数字先放入str, 然后把大写字母转小写字母,再放入 str。最后双指针扫描str,当二者不行等时,返回false. 否则,最后返回true。时间复杂度O(n), 空间复杂度O(n).
class Solution {
public:
bool isPalindrome(string s) {
if(s.size() == 0) return true;
string str = "";
for(int i = 0; i < s.size(); ++i)
{
if(isdigit(s[i]) || islower(s[i]))
{
str += s[i];
}
else if(isupper(s[i]))
{
s[i] = tolower(s[i]);
str += s[i];
}
}
for(int i = 0, j = str.size()-1; i < j; ++i, --j)
{
if(str[i] != str[j])
{
return false;
}
}
return true;
}
};