08Leetcode---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.

思路:验证一个给定的字符串是否为回文,首先,如果遇到非字符和数字的符号(如标点符号)一律跳过  .isalnum(),同时,若遇到大写字母就转换为小写字母( .lower() );其次,用双指针left和right分别指向字符串的首尾,判断是否相同,若相同,指针left和right都向中间移动 1位,判断下一组,左指针小于右指针就一直循环;若不相同,直接返回False。

in short: 跳过非字符 非数字.isalnum() + 统一转化为小写字母进行比较.lower() + 双指针

C++版:

bool isPalindrome(string s){
    int left = 0, right = s.size()-1;
    while (left<=right){
        while(left <right && !isalnum(s[left]))  left++;     //去除字符(非字母 非数字)
        while(left < right && !isalnum(s[right]))  right--;  //去除字符(非字母 非数字)
    //if(toupper(s[l]) != toupper(s[r])) return false;
        if ((s[left] + 32 -'a')%32 != (s[right] + 32 -'a')%32)   
            return false;
        left++, right--;
    }
    return true;

    while(left < right){
        if(!isalnum(s[left])) left++;
        else if (!isalnum(s[right]))  right--;
        else if ((s[left] + 32-'a')%32 != (s[right] + 32 - 'a')%32)
                return false
        else{
            left++, right--;
        }
    }
    return true;
}

python版:

def isPalindrome(s):
    i, j = 0, len(s) -1
    while i <j :
        while i<j and not s[i].isalnum():
            i +=1
        while i<j and not s[j].isalnum():
            j -=1
        if s[i].lower() != s[j].lower():
            return False
    return True

reference:

          www.cnblogs.com/lightwindy/p/8553509.html

          blog.csdn.net/coder_orz/article/details/51304295

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值