面试经典题---125.验证回文串

125.验证回文串

我的解法:

双指针法:

首先使用left和right两个指针分别指向字符串首尾;

外部while循环保证 left<right,内部分别使用while循环找出此时最左和最右的字母数字字符(使用自定义函数 isLegal 来判断字符是否是大小写字母或数字,可以直接用c++自带的isalnum函数);

比较两指针所指向字符的小写形式是否一致,不同则直接返回false;

cpp 复制代码
class Solution {
    bool isLegal(char ch){
        if((ch >= '0' && ch <= '9') ||
            (ch >= 'A' && ch <= 'Z') ||
            (ch >='a' && ch <= 'z')){
            return true;
        }
        return false;
    }
public:
    bool isPalindrome(string s) {
        int n = s.size();
        int left = 0, right = n - 1;
        while(left < right){
            while(left < right && !isLegal(s[left])){
                left++;
            }
            while(left < right && !isLegal(s[right])){
                right--;
            }
            if(left < right){
                if(tolower(s[left]) != tolower(s[right])){
                    return false;
                }
                left++;
                right--;
            }
        }
        return true;
    }
};
相关推荐
手写码匠3 分钟前
手写 Prefix Caching:从零构建 LLM 提示词缓存引擎
人工智能·深度学习·算法·aigc
枕星而眠4 分钟前
【数据结构】树与二叉树基础知识点总结
数据结构·c++·后端·算法·运维开发
海梨花5 分钟前
腾讯面试高频算法题
java·算法·面试
珂朵莉MM6 分钟前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--整数线性规划
人工智能·算法
小则又沐风a8 分钟前
今日算法----一篇文章学会背包问题
运维·服务器·算法
不会C语言的男孩13 分钟前
C++ Primer 第16章:模板与泛型编程
开发语言·c++
2301_7644413320 分钟前
Factorization Machine(FM模型,因子分解机)
python·算法
QT-Neal23 分钟前
C++智能指针使用详解
开发语言·c++
少许极端33 分钟前
算法奇妙屋(五十二)-备战+复习2
java·算法