首页 > 其他 > 详细

【LeetCode练习题】Valid Palindrome

时间:2014-04-16 23:56:10      阅读:686      评论:0      收藏:0      [点我收藏+]

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.

 

判断是否是回文字符串。

 

解题思路:

刚拿到这个题啊,因为之前 递归反转栈 那道题的影响,我直接就上了递归了。即判断是否是回文字符串,先判断第一个和最后一个字符是否相同,如果相同,则取中间的串为子串进行递归。

递归返回条件是字符串只有一个字符或两个字符的时候。

 

于是我写了以下的代码:

bubuko.com,布布扣
class Solution {
    
    bool isPalin(string s) {
        if(s.size() == 1)
            return true;
        if(s.size() == 2)
            if(s[0] == s[1])
                return true;
            else
                return false;
        if(s[0] == s.back()){
            string sub = s.substr(1,s.size()-2);
            bool isSub = isPalindrome(sub);
            if(isSub)
                return true;
        }
        return false;
    }
    
public:
    bool isPalindrome(string s) {
        if(s.size() == 0)
            return true;
        string str2;
        for(int i = 0;i < s.size();i++){
            if(isalnum(s[i]))
                str2.append(1,tolower(s[i]));
        }
        if(str2.size() == 0)
            return true;
        return isPalin(str2);
    }
};
bubuko.com,布布扣

提交上去以后……

超时!!

 

果然还是我想多了。。。

其实这一题特别简单,一个指针指向第一个,一个指针指向最后一个,遍历一遍就可以了。遇到非数字字母字符的忽略掉,如果两个字符不相等,就return false。

代码如下:

bubuko.com,布布扣
class Solution {
public:
    bool isAlphanumeric(char &c){
        if(c >= A && c <= Z){
            c = c | 0x20;
            return true;
        }
        else if( c >= 0 && c <= 9 || c >= a && c <= z)
            return true;
        else
            return false;
    }

    bool isPalindrome(string s) {
        int i = 0;
        int j = s.size() - 1;
        while(i < j){
            if(!isAlphanumeric(s[i]))
                ++i;
            else if(!isAlphanumeric(s[j]))
                --j;
            else if(s[i++] != s[j--])
                return false;
        }
        return true;
    }
};
bubuko.com,布布扣

 

【LeetCode练习题】Valid Palindrome,布布扣,bubuko.com

【LeetCode练习题】Valid Palindrome

原文:http://www.cnblogs.com/4everlove/p/3669481.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!