您的位置:首页 > 其它

leetcode 125 Valid Palindrome(判断回文字符)

2018-12-27 16:54 127 查看

题目要求

给定一个字符串,确定它是否是回文,仅考虑字母数字字符并忽略大小写。
注意:空字符串定义为有效回文。

解题思路

本题可以算是leetcode9 判断是不是回文数 的升级版,不同的是,本题字符中包含了字母,数字,空格,标点等特殊字符,所以在处理上和9题还是有点不同。
首先我们先将输入的字符串s 进行反转,并且保存下来,记为r。
然后只要比较r,s是不是相等即可,但是这里需要注意(去除符号和统一大小写)
根据题目要求,我们仅仅考虑字母和数字并且忽略大小写,所以要使用 isalnum()函数 来判断当前遍历的元素是不是字母或者数字,只有在是的时候才进行后续操作。并且通过使用tolower() / toupper()函数来统一大/小写。

最后用两个变量来存储处理后的s和r。比较s,r得到结果。

主要代码 c++

class Solution {
public:
bool isPalindrome(string s) {
string ori,rev;
string r =s;
reverse(r.begin(),r.end());
for(int i=0;i<s.size(); i++)
{
// 去除符号,统一大小写
if(isalnum(s[i])) ori += tolower(s[i]);
if(isalnum(r[i])) rev += tolower(r[i]);
}
return ori==rev;
}
};

特别地

reverse(start,end) 函数实现方式:循环交换首尾元素。因此复杂度是线性的,并且循环半个数组长度。
使用函数tolower() / toupper() 统一大小写。
使用函数isalnum()来判断是否为数字和字母。

原题链接:https://leetcode.com/problems/valid-palindrome/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐