验证回文字符串

原题:

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

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

示例 1:

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

示例 2:

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


解法1:

思路:先去除标点符号,以及空格,把字符串都变成小写,因为后面需要字符串前后对比;转换成字符数组,首尾开始往中间依次对比,相同则是回文。

class Solution {
   public  boolean isPalindrome(String s) {
        s=s.replaceAll("[\\pP\\p{Punct}]" , "");
        s=s.replaceAll(" +" , "");
        s=s.toLowerCase();
        char[] array=s.toCharArray();
        int n=array.length;
        for(int i=0;i<n/2;i++){
            if(array[i]!=array[n-1-i]){
                return false;
            }
        }
        return true;
    }
}


解法2:

思路:这题的重点就是去除这些标点符号的干扰,下面这个算法就是写一个函数判断是否为数字或字母,在前后对比时,先判断是否为数字或字母,是就舍弃移位。这样做就省去了对字符串的各种操作了。

class Solution {
public:
    bool isPalindrome(string s) {
        int left = 0, right = s.size() - 1 ;
        while (left < right) {
            if (!isAlphaNum(s[left])) ++left;
            else if (!isAlphaNum(s[right])) --right;
            else if ((s[left] + 32 - 'a') %32 != (s[right] + 32 - 'a') % 32) return false;
            else {
                left++;
                right--;
            }
        }
        return true;
    }
    bool isAlphaNum(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;
    }
};


BB一句:

注意:
1 、s=s.replaceAll("[\pP\p{Punct}]" , ""); 去除标点作用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符...
    呆萌院长阅读 2,498评论 0 0
  • 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义...
    Eddiehe212阅读 4,404评论 0 0
  • 内容 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba"输出: ...
    吃饭用盘装阅读 3,138评论 0 0
  • 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义...
    小白学编程阅读 4,608评论 0 0
  • 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义...
    1f872d1e3817阅读 2,394评论 0 0