• 【LeetCode 】验证回文串


    【问题】给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
    说明:本题中,我们将空字符串定义为有效的回文串。

    示例 1:
    输入: "A man, a plan, a canal: Panama"
    输出: true
    示例 2:
    输入: "race a car"
    输出: false

    【思路】

    这个思路很好想,我们利用双指针l和r,从字符串两端开始比较每个字符,如果字符不相同,则返回false。如果相同,则l++,r--,向中间靠拢。
    但关键的关键,就是检测每个字符有效,并忽略字母大小写。并且程序还要解决一个字符串没有有效字母的情况!

    字母大小写转换的快捷方法:

    统一转成大写:ch & 0b11011111 简写:ch & 0xDF

    统一转成小写:ch | 0b00100000 简写:ch | 0x20

    【题解】

    class Solution {
    public:
        bool isvalid(char c){
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') 
            || (c >= '0' && c <= '9')){
                return false;
            }
            return true;
        }
    
        bool isPalindrome(string s) {
            if(s == "") return true;
            int l = 0, r = s.length() - 1;
            while(l < r){
                while(isvalid(s[l]) && (l <r)) l++;
                while(isvalid(s[r]) && (l <r)) r--;
                if (l < r){
                    if((s[l++] | 0x20) != (s[r--] | 0x20)){
                        return false;
                    }
                } 
            }
            return true;
        }
    };
  • 相关阅读:
    Python的数据类型--数字--字符串
    python基本--数据类型
    系统分区 ,硬盘格式化,
    linux 用户创建,权限,分组
    协程
    进程
    线程与进程--线程三把锁
    线程
    socket网络编程-字典
    socket网络编程
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11669742.html
Copyright © 2020-2023  润新知