码迷,mamicode.com
首页 > 其他好文 > 详细

OJ练习30——T125 Valid Palindrome

时间:2015-04-27 09:31:19      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

判断字符串是否是回文。

字母、数字都算在内;空串也是回文。

【思路】

经典回文,两个指针,一个从前向后遍历,一个从后向前,遇到不是要求字符的就跳过。

前后指针位置交叉(i>j),则遍历结束。

特殊的地方在于,包含字母和数字,如果一一排除,代码很繁琐。

【my code】

bool isPalindrome(string s) {
        if(s=="")
            return true;
        int length=s.size();
        int i=0,j=length-1;
        while(i<=j){
            //while(!((s[i]>=‘a‘&&s[i]<=‘z‘)||(s[i]>=‘A‘&&s[i]<=‘Z‘))&&i<j)
            while((s[i]== ||ispunct(s[i]))&&i<j)
                i++;
            //while(!((s[j]>=‘a‘&&s[j]<=‘z‘)||(s[j]>=‘A‘&&s[j]<=‘Z‘))&&i<j)
            while((s[j]== ||ispunct(s[j]))&&i<j)
                j--;
            if(i<=j&&((s[i]==s[j])||abs(s[i]-s[j])==32)){
                i++;
                j--;
            }
            else return false;
        }
        return true;
    }

【评价】

这里用了一个ctype的函数,ispunct(char),当字符是非空格或数字或字母时,返回0,但题目不包括空格,所以要加上。

另外,i和j的比较要在每一个循环中,否则不满足条件也会继续执行。

用时16ms。

OJ练习30——T125 Valid Palindrome

标签:

原文地址:http://www.cnblogs.com/ketchups-notes/p/4458997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!