LeetCode(125):验证回文串

Posted Ariel_一只猫的旅行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(125):验证回文串相关的知识,希望对你有一定的参考价值。

Easy!

题目描述:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

解题思路:

验证回文字符串是比较常见的问题,所谓回文,就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。但是这里,加入了空格和非字母数字的字符,增加了些难度,但其实原理还是很简单:只需要建立两个指针,left和right, 分别从字符的开头和结尾处开始遍历整个字符串,如果遇到非字母数字的字符就跳过,继续往下找,直到找到下一个字母数字或者结束遍历,如果遇到大写字母,就将其转为小写。等左右指针都找到字母数字时,比较这两个字符,若相等,则继续比较下面两个分别找到的字母数字,若不相等,直接返回false,时间复杂度为O(n)。

C++解法一:

 1 class Solution {
 2 public:
 3     bool isPalindrome(string s) {
 4         int left = 0, right = s.size() - 1 ;
 5         while (left < right) {
 6             if (!isAlphaNum(s[left])) ++left;
 7             else if (!isAlphaNum(s[right])) --right;
 8             else if ((s[left] + 32 - \'a\') %32 != (s[right] + 32 - \'a\') % 32) return false;
 9             else {
10                 ++left; --right;
11             }
12         }
13         return true;
14     }
15     bool isAlphaNum(char &ch) {
16         if (ch >= \'a\' && ch <= \'z\') return true;
17         if (ch >= \'A\' && ch <= \'Z\') return true;
18         if (ch >= \'0\' && ch <= \'9\') return true;
19         return false;
20     }
21 };

我们也可以用系统自带的判断是否是数母字符的判断函数isalnum。

C++解法二:

 1 class Solution {
 2 public:
 3     bool isPalindrome(string s) {
 4         int left = 0, right = s.size() - 1 ;
 5         while (left < right) {
 6             if (!isalnum(s[left])) ++left;
 7             else if (!isalnum(s[right])) --right;
 8             else if ((s[left] + 32 - \'a\') %32 != (s[right] + 32 - \'a\') % 32) return false;
 9             else {
10                 ++left; --right;
11             }
12         }
13         return true;
14     }
15 };

对于该问题的扩展,还有利用Manacher算法来求解最长回文字符串问题,参见http://www.cnblogs.com/grandyang/p/4475985.html

以上是关于LeetCode(125):验证回文串的主要内容,如果未能解决你的问题,请参考以下文章

前端与算法 leetcode 125. 验证回文串

LeetCode-125-验证回文串

Leetcode 125.验证回文串 By Python

LeetCode:验证回文串125

Leetcode125. 验证回文串(JAVA双指针)

LeetCode 125. 验证回文串