版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50623165

翻译

给定一个字符串,确定它是否是回文的,仅仅考虑其中的数字和字符并忽略其他。例如,
“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(有效回文)(*)相关推荐

  1. 【回文串3】LeetCode 125. Valid Palindrome

    LeetCode 125. Valid Palindrome Solution1:我的答案 复杂度为O(n)O(n)O(n),写法不是很简练啊. class Solution { public:boo ...

  2. [勇者闯LeetCode] 125. Valid Palindrome

    [勇者闯LeetCode] 125. Valid Palindrome Description Given a string, determine if it is a palindrome, con ...

  3. LeetCode 125. Valid Palindrome

    题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...

  4. 【回文串14】LeetCode 680. Valid Palindrome II

    LeetCode 680. Valid Palindrome II Solution1:我的答案 复杂度是O(n)O(n)O(n),不算好啊.. 注意:对于c++中string对象常用的insert( ...

  5. 125 Valid Palindrome

    125 Valid Palindrome 链接:https://leetcode.com/problems/valid-palindrome/ 问题描写叙述: Given a string, dete ...

  6. C++palindrome partitioning回文分割算法的实现(附完整源码)

    C++palindrome partitioning回文分割算法的实现 C++palindrome partitioning回文分割算法的实现的完整源码(定义,实现,main函数测试) C++pali ...

  7. 动态规划 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 ...

  8. leetcode 1400. 构造 K 个回文字符串

    leetcode 1400. 构造 K 个回文字符串 文章目录 leetcode 1400. 构造 K 个回文字符串 一.题目 1.题目描述 2.基础框架 3.解题思路 一.题目 原题链接:1400. ...

  9. java 最长回文_【Java】【每日算法/刷穿 LeetCode】5. 最长回文子串(中等)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]5. 最长回文子串(中等) 宫水三叶发布于 今天 12:00 题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 示例 ...

最新文章

  1. 6个超实用的Sudo命令使用技巧
  2. php reids的geo功能,Redis GEO相关命令和功能,你造吗?
  3. C语言-一维数组与指针
  4. 2017年10月21日 数据库基础三大范式
  5. 如何异步提交表单 如何异步跨域提交表单
  6. C#中修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
  7. 通过RADIUS 服务器管理无线AP的VLAN
  8. hibernate脏数据_Hibernate脏检查的剖析
  9. WINCE下I/O操作基础
  10. Zabbix监控nginx status
  11. (libgdx学习)Net的使用
  12. 【C++】重定义,重载,重写
  13. thinkphp5.1+workman+jsonRpc
  14. CSS4day(圆角边框,阴影,浮动详解及其示例)
  15. android 11.0 12.0设置app为默认浏览器
  16. Canence第5篇之用IPC-7351 LP Wizard生成PCB lib
  17. 会议panel是什么意思中文_医学术语中的panel到底是什么意思
  18. 投影分带方法(我国的6°、3°分法)
  19. 如何在MSDN上下载操作系统
  20. 优质开源:共享图书小程序3.0 全新UI 免费下载

热门文章

  1. 配置MySQL主从复制
  2. ASP.NET强大的性能
  3. Google Test(GTest)使用方法和源码解析——Listener技术分析和应用
  4. 一种准标准CSV格式的介绍和分析以及解析算法
  5. CUDA Samples: Ray Tracking
  6. mysql binlog恢复错误_mysql通过binlog日志来恢复数据
  7. opengl正方形绕点旋转_一题十五种解法够不够? 旋转,构造,四点共圆乐不停...
  8. 判断线程是否执行完毕_关于线程池你不能不知道的东西
  9. Java学习总结:35(数字操作类)
  10. android 定时换图片,android 视频和图片切换并进行自动轮播