法一:用双指针,在原字符上直接判断
解题思路:
strings.TOLower():将大写字符转换成小写字符;
strings.ToUpper(s string)string:将小写字符串转换成大写字符
首先,先排除非字母或数字的元素,设左指针和右指针,若是遇到非字母和数字的元素,跳过该元素,left指针往右移/right指针往左移。
用ASCII码来判断是否是字母或数:A-Z 、a-z、0-9。
如果字符遍历过程中左指针和右指针的字符不相等,直接返回false。
相等则继续遍历。
func isPalindrome(s string) bool {
s=strings.ToLower(s)//将大写字符串转换成小写字符串
left,right:=0,len(s)-1
for left<right{
for left<right&&!isalnum(s[left]){
left++
}
for left<right&&!isalnum(s[right]){
right--
}
if left<right{
if s[left]!=s[right]{
return false
}
left++
right--
}
}
return true
}
func isalnum (c byte) bool{
return (c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9')
}