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/
相关文章推荐
- leetcode 680. Valid Palindrome II 去除一个字符的回文字符串判断 + 双指针
- 【leetcode】对撞指针应用之回文字符串判断(忽略大小写,以及出数字外其他字符)
- [LeetCode]-Palindrome Number 判断整数回文
- 判断一个字符串是否为回文字符(原创,请勿转载!)
- 判断回文字符
- 判断一个字符串(超过80个字符)是否是回文结构(正序和逆序相同)
- leetcode之O(1)空间复杂度判断一个整数是否是回文整数
- 判断字符串是否可以通过交换相邻字符得到回文字符串,如果可以输出最少交换次数
- LeetCode 125 Valid Palindrome(有效回文)(*)
- LeetCode 234. Palindrome Linked List判断链表是否回文
- 判断是否为回文数或回文字符
- 【leetcode】第9题:判断整型数是否为回文数
- 输入一个字符串,判断该字符串插入一个字符,能否使其成为回文字符串
- 判断一个字符串是否能够通过添加一个字符变成回文序列的方法
- 实验9-2 //编程判断输入的一串字符是否为“回文”。所谓“回文”,是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是“回文”。要求使用指针变量判断字符串是否是回文。
- 第15周OJ实践8 判断字符是否为回文数
- leetcode判断回文
- leetcode125---Valid Palindrome(回文字符串)
- leetcode——Palindrome Number 判断整数数字是否为回文(AC)
- 【LeetCode008-009算法/编程练习C++】string转int(atoi),判断数字是否是回文