首页 > 编程语言 > 详细

LeetCode 初级算法 数组

时间:2020-06-20 19:50:15      阅读:67      评论:0      收藏:0      [点我收藏+]

1.验证回文字符串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false


因为是字符串,在ASCII 编码中,可显示的字符是在32位(0-31属于不可显)后,而题目中只考虑字母和数字,又把符号等排除了

在C++库中,有以下函数判断字符是否是数字和字母

 int isalpha(int c);
【参数】c 为需要被检测的字符。

【返回值】若参数c 为英文字母(a ~ z  A ~ Z),则返回非 0 值,否则返回 0。
int isdigit( int arg );
【参数】arg 为需要被检测的字符。

【返回值】若参数c 为数字,则返回非 0 值,否则返回 0。

经过两这个函数的判断之后,就剩下了数字,大写字母,小写字母,有趣的是在ACSII中 a和A的差值也是32(或许是有意的)

所以,可以让字符先加上32,然后减去字符a,最后对32取余,只需要判断余数是否相等,即可判断两个字符是否一致(忽略大小写字母的一致)

bool isPalindrome(string s) {
    int left = 0, right = s.size() - 1;

    while (left < right)
    {
        if (0 == isalpha(s[left]) && 0 == isdigit(s[left]))        {
            left++;
            continue;
        }
        if (0 == isalpha(s[right]) && 0 == isdigit(s[right])) {
            right--;
            continue;
        }
        if ((s[left] + 32 - a)%32 != (s[right]+32-a)%32)        {
            return false;
        }
        else        {
            left++;
            right--;
        }
    }
    return true;
    }

 





LeetCode 初级算法 数组

原文:https://www.cnblogs.com/gongkiro/p/13170052.html

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