【问题描写叙述】

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.

1.【基础知识】

回文字符串是一个正读和反读都一样的字符串,比方“level”或者“noon”等等就是回文串。

2.【屌丝代码】

class Solution {
public:
bool isPalindrome(string s)
{
int m(0);
char a[100]={'0'};
if(s.size()==0)
return true;
for(int k =0;k<s.length();k++)
{
if((s[k]<='z'&&s[k]>='a')||(s[k]>='A'&&s[k]<='Z'))
a[m++] = s[k];
}
a[m] = '\0';
int i(0),j(strlen(a)-1);
while(j>i)
{
if((a[i]!=a[j])&&(a[i]-a[j]!=32)&&(a[i]-a[j]!=-32))
return false;
i++;
j--;
}
return true;
}
};

【屌丝AC源代码】

#include<iostream>
#include<string> using namespace std; class Solution {
public:
bool isPalindrome(string s)
{
int m(0);
if(s.size()==0)
return true;
char *a = new char[s.size()-1];
for(int k = 0;k<s.length();k++)
{
if((s[k]<='z'&&s[k]>='a')||(s[k]>='A'&&s[k]<='Z')||(s[k]>='0'&&s[k]<='9'))
a[m++] = s[k];
// if(m>240)
// cout<<m<<endl;
}
// cout<<a<<endl;
a[m] = '\0';
// cout<<a<<endl;
int i(0),j(m-1);
while(j>i)
{
if(((a[i]<='z'&&a[i]>='a')||(a[i]>='A'&&a[i]<='Z'))&&((a[j]<='z'&&a[j]>='a')||(a[j]>='A'&&a[j]<='Z')))
if((a[i]!=a[j])&&((a[i]-a[j]!=32)&&(a[i]-a[j]!=-32)))
return false;
else
{
i++;j--;continue;
}
if(a[i]!=a[j])
return false;
i++;
j--; }
return true;
}
}; int main()
{
/*
cout<<sizeof(int)/sizeof(char)<<endl;
cout<<sizeof(unsigned int)/sizeof(char)<<endl;
cout<<sizeof(long int)/sizeof(char)<<endl;
cout<<sizeof(double)/sizeof(char)<<endl;
*/
// string mystr = "tyQZrD2 7UL91z,i`O2ef:6e'2\"yP !:,U.:pX90PU3CXo'i!;3 `j 0?\"'hK8 ? BAjM2\"DBw?7!4R3?U2E8F2y!? 3 R2!fw 6e!:0 ErCi98KM`,8`8648,mi3P0`,!5 E.?00J3A 52\"x8,tHy!'2!DLBbK'j!tt1C' 7`JPulW\"\"uRTbr\"',\",U`ZOW5'\"LMDQDMJ\"'5WOZ`U,\",'\"rbTRu\"\"WluPJ`7 'C1tt!j'KbBJD!2'!yHt,8x\"25 A3J00?.E 5!,`0P3im,8468`8,`MK89iCrE 0:!e6 wf!2R 3?!y2F8E2U? 3R4!7?wBD\"2MjAB ? 8Kh'\"?0 j` 3;!i'oXC3UP09Xp:.U,:! Py\"2'e6:fe2O`i,z19LU7 2DrZQyt";
string mystr = "ab2A";
Solution my;
cout<<my.isPalindrome(mystr)<<endl;
/*
cout<<mystr.size()<<endl;
cout<<mystr[0]<<endl;
cout<<mystr[mystr.size()-1]<<endl;
*/ return 0;
}

3.【AC源代码】

class Solution
{
public:
bool isPalindrome(string s)
{
transform(s.begin(), s.end(), s.begin(), ::tolower);// 字符串所有改为小写输出到 s 之中
auto left = s.begin();
auto right = prev(s.end());
while (left < right)
{
if (!::isalnum(*left))
{ ++left;
continue;}
if (!::isalnum(*right))
{ --right;
continue;}
if (*left != *right)
return false;
else{ left++, right--; }
}
return true;
}
};




4.【复盘】

1.失误点:considering only alphanumeric characters and ignoring cases 理解为回文的约束为字符且忽略其大写和小写。alphanumeric characters原意是数组和字符的,没考虑到数字,导致直接实现存在问题;

2.transform 使用方法详见文章 简单的程序诠释C++
STL算法系列之十八:transform

详址:http://blog.csdn.net/jerryjbiao/article/details/7523110

3.autokeyword:auto对象和变量被存储在栈中,它的生命周期仅存在于它的声明所在的块(block)中。

在块中定义的块假设不加其他的修饰符则都是auto类型的。

autokeyword能够省去。auto对象和变量对外部模块都是不可见的。

详见:C/C++中涉及存储方式的keyword:auto,static,register,extern

4.int isalnum ( int c );//检查字符是否是字母或者数字。

详见:isalnum
<ctype.h> <cctype>

详址:http://blog.csdn.net/snowdream86/article/details/6889276

5.定义函数:int tolower(int c);头文件:#include <stdlib.h>;函数说明:若參数 c 为大写字母则将该相应的小写字母返回。

详见 :tolower

详址:http://blog.csdn.net/Michaelwubo/article/details/41080495

5.【算法核心思想】

【屌丝AC源代码】

1)剔除字符串中非字母、数字字符;

2)非大写和小写关系的不相等以及普通的不等构成判据;

3)前、后向迭代比对,得到结果。

【AC源代码】

1)tolower方法,字符串转小写;

2)islnum方法。滤除标点字符得到推断;

3)前、后向迭代比对,得到结果。

最新文章

  1. jQuery概述
  2. 支持Cookie并开放了一些特殊设置项的HttpWebClient
  3. FZU 2148 moon game (计算几何判断凸包)
  4. 用c写99乘法表
  5. [转]NopCommerce MVC 插件机制分析
  6. Spring2.0集成Quartz1.5.2调度框架
  7. 06-OC分类、协议、ARC
  8. 使用.net备份和还原数据库
  9. hdu 1535 Invitation Cards(SPFA)
  10. python装饰器练习题
  11. Bootstrap-datepicker3官方文档中文翻译---Event/事件(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
  12. [物理学与PDEs]第4章第3节 一维反应流体力学方程组 3.1 一维反应流体力学方程组
  13. druid 连接池加密算法
  14. 实现Linux下的ls和ls-l
  15. [转帖]UML各种图总结-精华
  16. Distributed traceability with Spring Cloud: Sleuth and Zipkin
  17. Codeforces Beta Round #94 div 1 D Numbers map+思路
  18. js获取当前页面url信息方法(JS获取当前网址信息)
  19. Which adidas NMD Singapore is your favorite
  20. 随笔分类 - java高级特性

热门文章

  1. react自定义组件属性类型检测
  2. 网页内容切换效果实现的15个jQuery插件
  3. ASP.NET MVC 1.0 哈哈。。转过来,还没学。。
  4. LeetCode Weekly Contest 70 A B C D
  5. vue开发小程序简介
  6. [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene
  7. Ajax方式实现注册验证代码
  8. MyBatis-Invalid bound statement (not found)-问题处理
  9. unity游戏开发
  10. android 仿ios开关控件