首页 > 代码库 > LeetCode[String]: Valid Palindrome
LeetCode[String]: 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.
这个问题比较简单,常规思路解法如下:
bool isPalindrome(string s) {
for (int i = 0, j = s.size() - 1; i < j; ++i, --j)
{
while (i < s.size())
{
if (s[i] >= ‘0‘ && s[i] <= ‘9‘) break;
else if (s[i] >= ‘a‘ && s[i] <= ‘z‘) break;
else if (s[i] >= ‘A‘ && s[i] <= ‘Z‘) { s[i] += (‘a‘ - ‘A‘); break; }
++i;
}
while (j >= 0)
{
if (s[j] >= ‘0‘ && s[j] <= ‘9‘) break;
else if (s[j] >= ‘a‘ && s[j] <= ‘z‘) break;
else if (s[j] >= ‘A‘ && s[j] <= ‘Z‘) { s[j] += (‘a‘ - ‘A‘); break; }
--j;
}
if (s[i] != s[j]) return false;
}
return true;
}
另外还有一种解法就是利用C++里面的isalnum()和tolower()函数。这两个函数的介绍分别如下:
isalnum():
tolower():
利用这两个函数的C++解法如下:
bool isPalindrome(string s) {
for (int i = 0, j = s.size() - 1; i < j; ++i, --j)
{
while (i < s.size() && !isalnum(s[i])) ++i;
while (j >= 0 && !isalnum(s[j])) --j;
if (tolower(s[i]) != tolower(s[j])) return false;
}
return true;
}
这两种解法的时间复杂度均为O(N),空间复杂度均为O(1),时间性能表现差不多,如下图所示:
另外这个题目还可以利用正则表达式来解。
LeetCode[String]: Valid Palindrome
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。