Leetcode刷题28-125.验证回文串(C++)
2019-03-19 21:49
387 查看
题目来源:链接: [https://leetcode-cn.com/problems/valid-palindrome/].
125.验证回文串
1.问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例1:
输入: "A man, a plan, a canal: Panama" 输出: true
示例2:
输入: "race a car" 输出: false
2.我的解决方案
先将大写字母全部转换成小写,然后用到了 isalnum()函数 :判读字符串是否为 字符 或 数字字符,最后比较首尾元素是否相等即可。
主要是使用了 isalnum()函数 简洁了代码。(ps:《C++primer》第82页中有其他类似函数的补充)
代码如下:
class Solution { public: bool isPalindrome(string s) { int i = 0; int j = s.size() - 1; transform(s.begin(), s.end(), s.begin(), ::tolower); while(i<j) { if(!isalnum(s[i])) { ++i; continue; } if(!isalnum(s[j])) { --j; continue; } if(s[i++] != s[j--]) { return false; } } return true; } }; //加速专用。。。 static auto _____ = []() { std::ios::sync_with_stdio(false); cin.tie(NULL); return 0; }();
3.大神们的解决方案
排名第一的解决方案,4ms,思路应该是常规解法。
class Solution { public: bool isPalindrome(string s) { string str=""; int len=s.length(); int lenStr=0; for(int i=0;i<len;i++){ if((s[i]>='a'&&s[i]<='z')||(s[i]>='0'&&s[i]<='9')){ str+=s[i]; lenStr++; } else if(s[i]>='A'&&s[i]<='Z'){ str+=(s[i]-'A'+'a'); lenStr++; } } for(int i=0;i<lenStr/2;i++){ if(str[i]!=str[lenStr-i-1]){ return false; } } return true; } };
4.我的收获
感觉自己基础不够扎实,还要继续加强训练。。。
2019/3/19 胡云层 于南京 28
相关文章推荐
- LeetCode - 125. 验证回文串
- LeetCode-125.验证回文串(相关话题:字符串)
- [leetcode]验证回文串[javascript]
- LeetCode 125. Valid Palindorme (验证回文字符串)
- [C++]LeetCode: 28 Valid Sudoku
- 【leetcode c++】28 Implement strStr()
- LeetCode 28 — Implement strStr()(C++ Java Python)
- leetcode 28 Implement strStr() C++
- leetcode:98. 验证二叉搜索树(C++)
- leetcode-125. Valid Palindrome(验证含有标点符号String是否为回文串)
- [C++]LeetCode 28: Implement strStr() (实现strStr()函数)
- 验证回文串 - LeetCode
- [C++]LeetCode: 109 Swap Nodes in Pairs (交换相邻节点位置)
- [LeetCode] UTF-8 Validation 编码验证
- 数字图像处理,二维图像小波阈值去噪的C++实现(matlab验证)
- C++ for leetcode起步
- LeetCode 5. 最长回文子串(C++)
- [LeetCode] Validate Binary Search Tree 验证二叉搜索树
- 28.表单验证插件——validate
- Leetcode_permutation-sequence(c++ and python version)