125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
示例 2:
提示:
先排除,在对比
func isPalindrome(s string) bool {
// 遍历删除非数字和字母
str:=[]rune{}
for _,v:=range s{
if v>='A'&&v<='Z'{
str=append(str,v+32)
}else if v>=48&&v<=57{
str=append(str,v)
}else if v>='a'&&v<='z'{
str=append(str,v)
}
}
// 使用双指针对比
for i,j:=0,len(str)-1;i<=j;i,j=i+1,j-1{
if str[i]!=str[j]{
return false
}
}
return true
}
直接双指针:
func isPalindrome(s string) bool {
// 使用双指针对比
for i,j:=0,len(s)-1;i<=j;{
a,b:=s[i],s[j] //s[i]s[j]是immutable
if (s[i]>='A'&&s[i]<='Z')||(s[i]>=48&&s[i]<=57)||(s[i]>='a'&&s[i]<='z'){
if s[i]>='A'&&s[i]<='Z'{
a=a+32
}
}else {
i++
continue
}
if (s[j]>='A'&&s[j]<='Z')||(s[j]>=48&&s[j]<=57)||(s[j]>='a'&&s[j]<='z'){
if s[j]>='A'&&s[j]<='Z'{
b=b+32
}
}else{
j--
continue
}
if a!=b{
return false
}else {
i++
j--
}
}
return true
}