LeetCode 125 Valid Palindrome(有效回文)(*)
翻译
给定一个字符串,确定它是否是回文的,仅仅考虑其中的数字和字符并忽略其他。例如,
“A man, a plan, a canal: Panama” 是回文的。
“race a car” 不是回文的批注:
你是否考虑了字符串可能为空?这种面试的时候是一个好问题。对于这问题的意图,我们定义空字符串是回文的。
原文
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.For example,
"A man, a plan, a canal: Panama" is a palindrome.
"race a car" is not a palindrome.Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.For the purpose of this problem, we define empty string as valid palindrome.
分析
题目解出来并不是很难,不过需要细心不过还是会出错。
第一步就是要从原字符串中的干扰去掉,也就是只保留字母,这可以通过ascii来判断。
然后构造出新的字符串,再判断这个新字符串是否是回文的就好了。
然而我也还是错了,首先我没想清楚题目的例子,”aA”也是回文的。
再一次修改之后我还是错了,因为题目的alphanumeric是字母数字均包含了,我一开始翻译的就是字母,后来上文的翻译也修改了。
于是我确定彻底的改革,将功能独立出来,然而代码好长了,但是很清晰:
代码
class Solution {
public:bool isAlpha(char c) {int ascii = (int)c;if ((ascii >= 65 && ascii <= 90) || (ascii >= 97 && ascii <= 122))return true;else return false;} bool isNumber(char c) {int ascii = (int)c;if (ascii >= 48 && ascii <= 57)return true;else return false;} bool isAlphaAndNumber(char c1, char c2) {if ((isAlpha(c1) && isNumber(c2)) || (isAlpha(c2) && isNumber(c1)))return true;else return false;} bool isPalindrome(string s) {if (s.size() == 0) return true;string newStr = "";for (int i = 0; i < s.size(); ++i) {// 只取出其中的字母和数字if (isAlpha(s[i]) || isNumber(s[i]))newStr += s[i];}for (int i = 0; i < newStr.size() / 2; ++i) {// 两者一个是字母、一个是数字if (isAlphaAndNumber(newStr[i], newStr[newStr.size() - i - 1]))return false;// 两者均为数字else if (isNumber(newStr[i]) && isNumber(newStr[newStr.size() - i - 1])) {// 判断是否是同一个数字if (newStr[i] != newStr[newStr.size() - i - 1])return false;}// 两者均为字母else {// 前面判断是否是同一个字母,后面判断是否是互为大小写if (newStr[i] != newStr[newStr.size() - i - 1] && abs((int)newStr[i] - (int)newStr[newStr.size() - i - 1]) != 32)return false;}}return true;}
};
进阶
一想到ascii就忘了还有toupper这些函数了,别人写的……
class Solution {
public:bool isPalindrome(string s) {int l = 0, r = s.size() - 1;while(l <= r){while(!isalnum(s[l]) && l < r) l++;while(!isalnum(s[r]) && l < r) r--;if(toupper(s[l]) != toupper(s[r])) return false;l++, r--;}return true;}
};
LeetCode 125 Valid Palindrome(有效回文)(*)相关推荐
- 【回文串3】LeetCode 125. Valid Palindrome
LeetCode 125. Valid Palindrome Solution1:我的答案 复杂度为O(n)O(n)O(n),写法不是很简练啊. class Solution { public:boo ...
- [勇者闯LeetCode] 125. Valid Palindrome
[勇者闯LeetCode] 125. Valid Palindrome Description Given a string, determine if it is a palindrome, con ...
- LeetCode 125. Valid Palindrome
题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...
- 【回文串14】LeetCode 680. Valid Palindrome II
LeetCode 680. Valid Palindrome II Solution1:我的答案 复杂度是O(n)O(n)O(n),不算好啊.. 注意:对于c++中string对象常用的insert( ...
- 125 Valid Palindrome
125 Valid Palindrome 链接:https://leetcode.com/problems/valid-palindrome/ 问题描写叙述: Given a string, dete ...
- C++palindrome partitioning回文分割算法的实现(附完整源码)
C++palindrome partitioning回文分割算法的实现 C++palindrome partitioning回文分割算法的实现的完整源码(定义,实现,main函数测试) C++pali ...
- 动态规划 53:Maximum Subarray,152:Maximum Subarray,266. Palindrome Permutation 回文全排列...
题意:寻找子数组的和最大. 思路:设置dp数组来保存到第i位的最大和. 判断第i-1位的正负,若dp[i-1]<0 则 dp[i] = nums[i]; 若 dp[i-1] > 0 则 d ...
- leetcode 1400. 构造 K 个回文字符串
leetcode 1400. 构造 K 个回文字符串 文章目录 leetcode 1400. 构造 K 个回文字符串 一.题目 1.题目描述 2.基础框架 3.解题思路 一.题目 原题链接:1400. ...
- java 最长回文_【Java】【每日算法/刷穿 LeetCode】5. 最长回文子串(中等)
首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]5. 最长回文子串(中等) 宫水三叶发布于 今天 12:00 题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 ...
最新文章
- 6个超实用的Sudo命令使用技巧
- php reids的geo功能,Redis GEO相关命令和功能,你造吗?
- C语言-一维数组与指针
- 2017年10月21日 数据库基础三大范式
- 如何异步提交表单 如何异步跨域提交表单
- C#中修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
- 通过RADIUS 服务器管理无线AP的VLAN
- hibernate脏数据_Hibernate脏检查的剖析
- WINCE下I/O操作基础
- Zabbix监控nginx status
- (libgdx学习)Net的使用
- 【C++】重定义,重载,重写
- thinkphp5.1+workman+jsonRpc
- CSS4day(圆角边框,阴影,浮动详解及其示例)
- android 11.0 12.0设置app为默认浏览器
- Canence第5篇之用IPC-7351 LP Wizard生成PCB lib
- 会议panel是什么意思中文_医学术语中的panel到底是什么意思
- 投影分带方法(我国的6°、3°分法)
- 如何在MSDN上下载操作系统
- 优质开源:共享图书小程序3.0 全新UI 免费下载
热门文章
- 配置MySQL主从复制
- ASP.NET强大的性能
- Google Test(GTest)使用方法和源码解析——Listener技术分析和应用
- 一种准标准CSV格式的介绍和分析以及解析算法
- CUDA Samples: Ray Tracking
- mysql binlog恢复错误_mysql通过binlog日志来恢复数据
- opengl正方形绕点旋转_一题十五种解法够不够? 旋转,构造,四点共圆乐不停...
- 判断线程是否执行完毕_关于线程池你不能不知道的东西
- Java学习总结:35(数字操作类)
- android 定时换图片,android 视频和图片切换并进行自动轮播