[LintCode] Valid Palindrome 验证回文字符串

简介:

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

Notice

Have you consider that the string might be empty? This is a good question to ask during an interview.

For the purpose of this problem, we define empty string as valid palindrome.

"A man, a plan, a canal: Panama" is a palindrome.

"race a car" is not a palindrome.

Challenge

O(n) time without extra memory.

LeetCode上的原题,请参见我之前的博客Valid Palindrome

解法一:

class Solution {
public:
    /**
     * @param s A string
     * @return Whether the string is a valid palindrome
     */
    bool isPalindrome(string& s) {
        int left = 0, right = s.size() - 1;
        while (left < right) {
            if (!isAlNum(s[left])) ++left;
            else if (!isAlNum(s[right])) --right;
            else if ((s[left] + 32 - 'a') % 32 != (s[right] + 32 - 'a') % 32) return false;
            else {
                ++left; --right;
            }
        }
        return true;
    }
    bool isAlNum(char c) {
        if (c >= 'a' && c <= 'z') return true;
        if (c >= 'A' && c <= 'Z') return true;
        if (c >= '0' && c <= '9') return true;
        return false;
    }
};

解法二:

class Solution {
public:
    /**
     * @param s A string
     * @return Whether the string is a valid palindrome
     */
    bool isPalindrome(string& s) {
        int left = 0, right = s.size() - 1;
        while (left < right) {
            if (!isalnum(s[left])) ++left;
            else if (!isalnum(s[right])) --right;
            else if ((s[left] + 32 - 'a') % 32 != (s[right] + 32 - 'a') % 32) return false;
            else {
                ++left; --right;
            }
        }
        return true;
    }
};

本文转自博客园Grandyang的博客,原文链接:验证回文字符串[LintCode] Valid Palindrome ,如需转载请自行联系原博主。

目录
打赏
0
0
0
0
5353
分享
相关文章
CPU的定义与功能与架构
CPU(中央处理器)是计算机的核心部件,负责执行程序指令、控制数据传输和进行运算。它能处理算术与逻辑运算,并协调其他硬件协同工作。x86架构源于英特尔,适用于PC和服务器,采用复杂指令集;ARM架构则由Acorn等公司开发,广泛用于移动设备和嵌入式系统,采用精简指令集,功耗低且能效比高。
320 5
Java排序实战:如何高效实现电商产品排序
在当今的数字化时代,电子商务已成为人们日常生活的重要组成部分。消费者可以在电商平台上浏览和购买来自全球的商品,这无疑为我们的生活带来了极大的便利。然而,随着电商平台的规模不断扩大,商品数量的急剧增加,如何对海量商品进行高效排序成为了电商系统开发的一大挑战。
从XHR、Promise到手动封装简易axios
从XHR、Promise到手动封装简易axios
187 0
销售词汇Sell In、Sell Through、Sell Out辨析
销售词汇Sell In、Sell Through、Sell Out辨析
3267 0
【MyBatis学习笔记 四】MyBatis基本运行原理源码解析
【MyBatis学习笔记 四】MyBatis基本运行原理源码解析
180 0
技术详解 阿里云AIoT物模型支撑设备规模已超亿级
本文介绍的物模型技术,对于阿里云AIoT来说,物模型技术早已沉淀多年,所以能够让各种硬件产品实现真正的智能化连接。
1710 1
技术详解 阿里云AIoT物模型支撑设备规模已超亿级
Firewalld防火墙(二。2)
⭐本文介绍⭐ 上一章介绍了Linux防火墙,并简单的编写了防火墙规则。Liunx防火墙在很多时候承担着连接企业内、外网的重任,除了提供数据包过滤功能以外,还提供了一些基本的网关应用。本文将介绍Linux防火墙的地址转换策略,分别掌握两个典型的应用:局域网共享一个公网IP地址接入Internet发布位于内网的应用服务器。
Firewalld防火墙(二。2)
IDE 性能优化策略
我们基于 LSP 的机制进行了体积压缩等优化。而对于界面渲染性能实际上并没有进行过针对性的优化,主要原因是对于一款 IDE 来说,视图太过于复杂,以至于谈到性能优化,一时间似乎无处下手。
240 0
IDE 性能优化策略
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问