• valid Palindrome -- leetcode


    125 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.

    思路:
    1. 定义两个指针,分布指向字符串的首尾
    2. 从头开始,过滤头部的非字母数字字符
    3. 然后从尾部开始,过尾部的非字母数字字符
    4. 头指针小于尾指针的情况下,
    1) 如果两个字母数字字符相同,
    2)头指针后移,并过滤非字母数字字符
    5. 如果两个字母不同,返回false

    代码:

    class Solution {
    public:
        bool isPalindrome(string s) {
           if (s.size() == 0 || s.size() == 1) return true;
           int low = 0, high = s.size() - 1;
             //从头开始,过滤头部的非字母数字字符
           while (low < s.size() && !isRightChar(s[low])) ++low;
             //从尾开始,过滤尾部的非字母数字字符
           while (high >= 0 && !isRightChar(s[high])) --high;
           while(low < high){
               if (lowerCase(s[low]) == lowerCase(s[high])){
                    //头指针后移,并过滤非数字字母字符
                   ++low;
                   while (low < s.size() && !isRightChar(s[low])) ++low;
                    //尾指针前移,并过滤非数字字母字符
                   --high;
                   while (high >= 0 && !isRightChar(s[high])) --high;
               }else return false;
           }
           return true;
        }
        //判读是否为数字字母字符
        bool isRightChar(char c){
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) return true;
            else return false;
        }
        //大写转小写
        char lowerCase(char c){
            if (c >= 'A' && c <= 'Z') return tolower(c);
            return c;
        }
    };
  • 相关阅读:
    操作系统基础知识
    os库基本介绍
    原型模式
    ASP .NetCore 部署500错误 查看异常详情
    css设置文本自动换行
    SqlServer数据库链接字符串
    Json列表数据查找更新
    VB中将类标记为可序列化
    VB 性能优化点
    参加公司工作总结会要准备的内容 IT 技术部
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779765.html
Copyright © 2020-2023  润新知