首页 > 代码库 > LeetCode: Valid Palindrome [125]
LeetCode: Valid Palindrome [125]
【题目】
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; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。