当前位置: 代码迷 >> 综合 >> leetcode 125 Valid Palindrome(判断回文字符)
  详细解决方案

leetcode 125 Valid Palindrome(判断回文字符)

热度:49   发布时间:2023-11-17 01:25:58.0

题目要求

给定一个字符串,确定它是否是回文,仅考虑字母数字字符并忽略大小写。
注意:空字符串定义为有效回文。

解题思路

本题可以算是leetcode9 判断是不是回文数 的升级版,不同的是,本题字符中包含了字母,数字,空格,标点等特殊字符,所以在处理上和9题还是有点不同。
首先我们先将输入的字符串s 进行反转,并且保存下来,记为r。
然后只要比较r,s是不是相等即可,但是这里需要注意(去除符号和统一大小写)
根据题目要求,我们仅仅考虑字母和数字并且忽略大小写,所以要使用 isalnum()函数 来判断当前遍历的元素是不是字母或者数字,只有在是的时候才进行后续操作。并且通过使用tolower() / toupper()函数来统一大/小写。

最后用两个变量来存储处理后的s和r。比较s,r得到结果。

主要代码 c++

class Solution {
    
public:bool isPalindrome(string s) {
    string ori,rev;string r =s;reverse(r.begin(),r.end());for(int i=0;i<s.size(); i++){
    // 去除符号,统一大小写if(isalnum(s[i])) ori += tolower(s[i]);if(isalnum(r[i])) rev += tolower(r[i]);}return ori==rev;}
};

特别地

reverse(start,end) 函数实现方式:循环交换首尾元素。因此复杂度是线性的,并且循环半个数组长度
使用函数tolower() / toupper() 统一大小写。
使用函数isalnum()来判断是否为数字和字母。

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

  相关解决方案