给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
解题思路:
回文字符串即正读和反读都一样的字符串。
只需判断字符串的反序和其自身对应位置上的字母或数字是否相同即可。
Python:
虽然Python语言中字符串没有内置的反序操作方法,但是它可以很方便的在不同数据类型间进行转换。因此保留字符串中的字母和数字(利用str.isalnum()函数),将其转换为列表,再用列表中的list.reverse()函数进行操作更为方便。
使用list.reverse()函数时要注意,该函数没有返回值,是直接对列表进行操作。因此要相互比较的话,只能将原来的列表复制一份再反序与原列表比较。
class Solution:
def isPalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
s_list = []
s = s.lower()
for ch in s:
if ch.isalnum():
s_list.append(ch)
s_list_copy = s_list[:]
s_list_copy.reverse()
return True if s_list == s_list_copy else False
C++
class Solution {
public:
bool isPalindrome(string s) {
if(!s.empty()){
string temp1, temp2;
for(auto c:s){
if(c>='a' && c<='z' || c>='A' && c<='Z'){
temp1 += tolower(c);
}
if(c>='0' && c<='9'){
temp1 += c;
}
}
temp2 = temp1;
reverse(temp1.begin(), temp1.end());
return temp1 == temp2;
}
return true;
}
};