面试经典题---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;
    }
};
相关推荐
啊哦呃咦唔鱼7 小时前
LeetCode hot100-3 无重复字符的最长子串
算法·leetcode·职场和发展
phltxy7 小时前
算法刷题|模拟思想高频题全解(Java版)
java·开发语言·算法
愚者游世7 小时前
template学习大纲
开发语言·c++·程序人生·面试·visual studio
宵时待雨7 小时前
C++笔记归纳10:继承
开发语言·数据结构·c++·笔记·算法
田梓燊7 小时前
最长的连续序列到底怎么写
算法·哈希算法·散列表
小温冲冲7 小时前
QML vs Qt Widgets:深度对比与选型实战指南
开发语言·c++·qt
smchaopiao7 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
一叶落4387 小时前
LeetCode 21. 合并两个有序链表(C语言详解 | 链表经典题)
c语言·数据结构·c++·算法·leetcode·链表
挠头猴子7 小时前
c++中常用的运算符优先级
java·开发语言·c++
阿里嘎多哈基米8 小时前
速通Hot100-Day04——哈希
数据结构·算法·leetcode·哈希算法·散列表