• Valid Palindrome


    题目链接

    Valid Palindrome - LeetCode

    注意点

    • 忽略大小写字母的不同

    解法

    解法一:i指向开头,j指向结尾,一起向中间移动,遇到大写字母就转成小写字母,遇到非字母就跳过。时间复杂度O(logn)

    class Solution {
    public:
        bool isPalindrome(string s) {
            int i = 0,j = s.size()-1;
            if(s.size() < 1) return true;
            while(i < j)
            {
                while(i < s.size() && !isalnum(s[i])) i++;
                while(j >= 0 &&!isalnum(s[j])) j--;
                if(i < s.size() && j >= 0 && (s[i] + 32 - 'a')%32 != (s[j] + 32 - 'a')%32) return false;
                i++;
                j--;
            }
            return true;
        }
    };
    

    小结

    • isalnum()是c++自带的用于判断是否是字母的函数
    • (ch+32-'a')%32是统一处理大小写字母的方法,因为小写字母比其对应的大写字母的ASCII码大32,所以如果遇到了大写字母,我们需要先加上32,然后再减去'a',就知道其相对于'a'的位置了,这个值肯定是小于32的,所以对32取余没啥影响。
      如果遇到小写字母,虽然加上了32,但是最后对32取余了,多加的32也就没了,所以还是能得到其相对于'a'的正确位置。
  • 相关阅读:
    YUM软件管理
    RPM软件包管理
    Linux系统启动详解
    Linux命令行文本处理工具
    Linux多命令协作:管道及重定向
    Linux网络基础配置
    网络基础
    Linux扩展权限
    Linux权限机制
    Linux用户基础
  • 原文地址:https://www.cnblogs.com/multhree/p/10648298.html
Copyright © 2020-2023  润新知