您的位置:首页 > 其它

<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,
"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 算法 string