【题目】
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
Note:
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.
【题意】
给定一个字符串,只关注英文字母和数字,忽略其他字符。问英文字母和数字按序排列后是否构成是回文
【思路】
利用回文串判断的老办法即可,两个指针p1, p2分别从头和尾中间扫描,判断对称位置的字符是否相同,只不过需要跳过除英文字母和数字之外的其他字符。
另外还需要注意处理2中特殊情况:(1)字符串为空串,(2)字符串不是空串,但里面没有英文字母或者数字。 这两种情况都判定为true
【代码】
class Solution { public: bool isAlphanumeric(char c){ if(isdigit(c))return true; if(c>='A'&&c<='Z'||c>='a'&&c<='z')return true; return false; } bool isEqual(char c, char b){ if(isdigit(c))return c==b; if(c>='A'&&c<='Z')c='a'+(c-'A'); if(b>='A'&&b<='Z')b='a'+(b-'A'); return c==b; } bool isPalindrome(string s) { int len=s.length(); if(len==0)return true; int front=0; int back=len-1; while(front<back){ while(front<=back && !isAlphanumeric(s[front]))front++; while(front<=back && !isAlphanumeric(s[back]))back--; if(front<=back){ if(!isEqual(s[front], s[back]))return false; front++; back--; } } return true; } };
LeetCode: Valid Palindrome [125],布布扣,bubuko.com
时间: 2024-08-05 07:46:37