【LeetCode-字符串】验证回文串

题目描述

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明: 本题中,我们将空字符串定义为有效的回文串。
示例:

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

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

题目链接: https://leetcode-cn.com/problems/valid-palindrome/

思路

首先清理输入的字符串:只保留字母和数字,并且将字母全部转为小写。然后判断清理后的字符串是否为回文串:

  • 设置两个指针 left=0,right=newStr.length()-1,left 和 right 由两边向中间靠拢;
  • 当 left<=right,循环:
    • 如果 newStr[left]!=newStr[right],返回 false;
  • 返回 true;

代码如下:

class Solution {
public:
    bool isPalindrome(string s) {
        if(s.empty()) return true;

        string newStr = "";
        for(int i=0; i<s.length(); i++){
            if(isalpha(s[i])){
                newStr += tolower(s[i]);
            }else if(isdigit(s[i])){
                newStr += tolower(s[i]);
            }
        }

        int left = 0, right = newStr.length()-1;
        while(left<=right){
            if(tolower(newStr[left])!=tolower(newStr[right])) return false;
            left++;
            right--;
        }
        return true;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

相关题目

1、https://www.cnblogs.com/flix/p/12916120.html

posted @ 2020-05-19 15:07  Flix  阅读(142)  评论(0编辑  收藏  举报