<LeetCode>125.Valid Palindrome 验证回文字符串 Tag:string
2017-04-26 12:53
351 查看
本文内容参考:
①
Grandyang 的博客
http://www.cnblogs.com/grandyang/p/4030114.html
② 九章算法的LeetCode参考答案 http://www.jiuzhang.com/solutions/valid-palindrome/
题目描述:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
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:
建立两个指针或者下标记录变量,从两端相向遍历,直至相遇。在遍历过程中,若指针指向的字符非 "alphanumeric"(数字字符或字母),则对应指针继续前移或者后移;若两个指针都指向字母/数字,那么比较其是否相同,不同则return false,相同则移动两个指针,继续遍历过程。
bool isPalindrome(string s) {
if(s.empty()) return true;
int i = 0;
int j = s.length() - 1;
while(i<j)
{
if(!isAlphaNum(s[i])) i++;
else if(!isAlphaNum(s[j])) j--;
else if ((s[i] - 'a' + 32)%32 != (s[j] - 'a' + 32)%32) return false;
else
{
i++;
j--;
}
}
return true;
}
bool isAlphaNum(char& s)
{
if(s>='a'&&s<='z') return true;
if(s>='A'&&s<='Z') return true;
if(s>='0'&&s<='9') return true;
return false;
}
参考答案2:
调用isalnum(int aCharOrNum)判断字符是否为字母或数字;调用transform(s.begin(), s.end(),
s.begin(),
::tolower)把字符串中的大写字母转为小写。
bool isPalindrome(string s) {
if(s.empty()) return true;
transform(s.begin(),s.end(),s.begin(),::tolower);//大写字母转为小写字母
int i = 0;
int j = s.size() - 1;
while(i < j)
{
if(!isalnum(s[i])) i++;
else if(!isalnum(s[j])) j--;
else if(s[i]!=s[j]) return false;
else
{
i++;
j--;
}
}
return true;
}
①
Grandyang 的博客
http://www.cnblogs.com/grandyang/p/4030114.html
② 九章算法的LeetCode参考答案 http://www.jiuzhang.com/solutions/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:
建立两个指针或者下标记录变量,从两端相向遍历,直至相遇。在遍历过程中,若指针指向的字符非 "alphanumeric"(数字字符或字母),则对应指针继续前移或者后移;若两个指针都指向字母/数字,那么比较其是否相同,不同则return false,相同则移动两个指针,继续遍历过程。
bool isPalindrome(string s) {
if(s.empty()) return true;
int i = 0;
int j = s.length() - 1;
while(i<j)
{
if(!isAlphaNum(s[i])) i++;
else if(!isAlphaNum(s[j])) j--;
else if ((s[i] - 'a' + 32)%32 != (s[j] - 'a' + 32)%32) return false;
else
{
i++;
j--;
}
}
return true;
}
bool isAlphaNum(char& s)
{
if(s>='a'&&s<='z') return true;
if(s>='A'&&s<='Z') return true;
if(s>='0'&&s<='9') return true;
return false;
}
参考答案2:
调用isalnum(int aCharOrNum)判断字符是否为字母或数字;调用transform(s.begin(), s.end(),
s.begin(),
::tolower)把字符串中的大写字母转为小写。
bool isPalindrome(string s) {
if(s.empty()) return true;
transform(s.begin(),s.end(),s.begin(),::tolower);//大写字母转为小写字母
int i = 0;
int j = s.size() - 1;
while(i < j)
{
if(!isalnum(s[i])) i++;
else if(!isalnum(s[j])) j--;
else if(s[i]!=s[j]) return false;
else
{
i++;
j--;
}
}
return true;
}
相关文章推荐
- <LeetCode>115.Distinct Subsequences 求相同子序列数 Tag:DP, string
- <LeetCode> 题8:旋转字符串
- <leetcode>String to Integer (atoi)
- <LeetCode> 题13:字符串查找(strstr)
- <转>KMP字符串模式匹配详解
- C语言标准库概览详述[10]-字符串<string.h>
- web.config中验证的<deny users = "?"/>和<allow users= "*" />有先后顺序只说
- 用string.Join与List<T>或者与string数组转换为字符串
- <C#>关于string.Empty & "" & null 的讨论
- <supports-screens> tag appears after <application> tag
- <<字符串高级截取和统计>>一文的C#正则实现
- 用string.Join与List<T>或者与string数组转换为字符串
- <string.h>的学习
- 判断字符串string所有分割和子串是否为回文(palindrome)并返回结果(Palindrome Partitioning)
- <Effective STL>笔记--vector和string
- <NSString>OC字符串
- <黑马程序员>String与StringBuffer
- <转载>C# 验证IP地址、Email格式、URl网址
- <转>在xslt中实现split方法对查询字符串进行分隔
- <2012 12 17> C标准库中一些字符串操作函数的实现