回文串
对一个字符串来说,从前往后读和从后往前读是一样的,这样的字符串叫做回文串。注意,空字符串也是回文串。
题目要求
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
题目分析
根据题目要求,由于字符串中存在一些特殊符号,比如逗号、冒号等,在确认是否是回文串的过程中,这些特殊符号需要去除, 否则无法确认是否是回文串。 最后,我们需要两个指针,一前一后,同时往字符串的中间进行移动,每移动一位进行比较,如果相同就继续往下 比较,如果不同那么就跳出。
示例1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例2:
输入: "race a car"
输出: false
详细代码
class Solution:
def isPalindrome(self, s: str) -> bool:
s = s.lower() # 统一转换为小写
i = 0 # 左指针
j = len(s)-1 # 右指针
while i < j:
if s[i].isalnum() and s[j].isalnum(): # 判断是否是字母或数字,isalnum()函数见拓展
if s[i] != s[j]: # 左不等于右时
return False # 返回False
else: # 否则,继续遍历
i += 1
j -= 1
elif not s[i].isalnum(): # 左指针的value不是字母或者数字时,右移
i += 1
else: # 右指针的value不是字母或者数字时,左移
j -= 1
return True
验证
示例1:
输入:
solution = Solution()
s = "A man, a plan, a canal: Panama"
solution.isPalindrome(s)
输出:
True
示例2:
输入:
solution = Solution()
s = "race a car"
isPalindrome(s)
输出:
True
拓展
判断字符串是否全是数字,isdigit()函数
输入:
a = '123'
a.isdigit() # 判断字符串a是否为数字
输出:
True
判断字符串是否全是字母,isalpha()函数
输入:
a = 'abc'
a.isalpha() # 判断字符串a是否为字母
输出:
True
判断字符串是否全是数字和字母,isalnum()函数
输入:
a = '123abc'
a.isalnum() # 判断字符串a是否为字母和数字
输出:
True
持续更新中。。。。。