【leetcode】Valid Palindrome

来源:互联网 发布:网络架构师工资 编辑:程序博客网 时间:2024/05/25 16:39

链接:https://oj.leetcode.com/problems/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.


解法:

直接求解。O(n)。Accept


代码如下:

    bool isPalindrome(string s) {    int len  = s.length();    if(len <= 1) return true;    int start = 0;    int end = len -1;    while( start < end)    {    while(start < end && !isalnum(s[start]))    start++;    while(start < end && !isalnum<span style="font-family: Arial, Helvetica, sans-serif;">(s[end]) )</span>    end--;    char ch1 = s[start];    char ch2 = s[end];    if( start < end &&  tolower(ch1) != tolower(ch2))    return false;    start++,end--;    }    return true;    }

代码二:

修改了原输入,需慎重。

    bool isPalindrome(string s) {        transform(s.begin(), s.end(), s.begin(),::tolower);        auto left = s.begin(), right = prev(s.end());        while(left < right){            if(!::isalnum(*left)) ++left;            else if(!::isalnum(*right)) --right;            else if(*left != *right) return false;            else {                ++left, --right;            }        }        return true;    }


0 0
原创粉丝点击