LeetCode 之 Valid Palindrome(字符串)
【问题描写叙述】
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)前、后向迭代比对,得到结果。
LeetCode 之 Valid Palindrome(字符串)的更多相关文章
- Leetcode 125 Valid Palindrome 字符串处理
题意:判断字符串是否是回文字符串 先将所有的字母和数字字符保留,并将大写字母转化成小写字母,然后将字符串倒置,比较前后两个字符串是否相同. 该题最好的解法可以模仿 Leetcode 345 Rever ...
- [LeetCode] 680. Valid Palindrome II 验证回文字符串 II
Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...
- [LeetCode] 125. Valid Palindrome 验证回文字符串
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- 【题解】【字符串】【Leetcode】Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- [Leetcode][JAVA] Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- leetcode 125. Valid Palindrome ----- java
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- leetcode:Valid Palindrome
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...
- Java [Leetcode 125]Valid Palindrome
题目描述: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ...
- 【LeetCode】- Valid Palindrome(右回文)
[ 问题: ] Given a string, determine if it is a palindrome, considering only alphanumeric characters an ...
随机推荐
- 洛谷[P3622] 动物园
状压DP 发现本题中,每个小朋友是否高兴仅取决于其后五个动物的情况,我们可以用状压DP解决本题 首先已处理 num[i][s] 表示对于位置 i ,状态为 s 时有多少在 s 的同学满意 转移方程很好 ...
- 【转】Resharper上手指南
原文发布时间为:2011-02-16 -- 来源于本人的百度文章 [由搬家工具导入] 我是visual studio的忠实用户,从visual studio 6一直用到了visual studio 2 ...
- 【MFC】Tab Control 控件的使用(转)
原文转自 http://blog.csdn.net/hustspy1990/article/details/5425365 1.先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control ...
- python 保留两位小数方法
原博客连接:https://blog.csdn.net/Jerry_1126/article/details/85009810 保留两位小数,并做四舍五入处理 方法一:使用字符串格式化 a = 12. ...
- sublime text3中成功使用bootstrap3
在视图这里卡了挺久的,一直是自己在研究.其实自己有一个坏毛病,遇到问题,在网上搜集下找不到便寻求帮助(大多数是求助无效果,因为自己也没搞懂), 这时候自己就会懈怠一会,然后隔一两天心血起伏后便又继续干 ...
- javascript 移动鼠标高亮显示改行
主要用到两个事件 onmouseover onmouseout <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- Codeforces 158 B. Taxi[贪心/模拟/一辆车最多可以坐4人同一个群的小朋友必须坐同一辆车问最少需要多少辆车]
http://codeforces.com/problemset/problem/158/B B. Taxi time limit per test 3 seconds memory limit pe ...
- 注意这几点,轻轻松松配置 Nginx + Tomcat 的集群和负载均衡
Tomcat 集群是当单台服务器达到性能瓶颈,通过横向扩展的方式提高整体系统性能的有效手段.Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,可以通过简单的配置实现 Tomcat 集群 ...
- Android学习--ListView
这篇文章用于总结自己这两天学到的安卓的ListView和RecyclerView 的笔记,以及从我这个iOS开发者的角度去理解和学习这两个控件,会比较一下他们个iOS中那些控件是一致的,可以用来对比的 ...
- cdq分治解决区间问题
如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...