
func isPalindrome(s string) bool {
// 判断是否是需要比较的合法回文字符,
// 题目说空格是合法的回文字符很误导人, 其实这个地方需要排除空格
isValid := func(v rune) bool {
return unicode.IsDigit(v) || unicode.IsLetter(v)
}
i, j := 0, len(s)-1
for i < j {
for i<len(s)&&!isValid(rune(s[i])){
i++
}
for j>=0&&!isValid(rune(s[j])){
j--
}
if i<len(s)&&j>0&&(unicode.ToUpper(rune(s[i])) != unicode.ToUpper(rune(s[j]))) {
return false // 如果都合法如果不相等则直接返回
} else { // 如果相等则移动两个指针
i++
j--
}
}
return true
}
func isValid(i rune)bool{
return unicode.IsDigit(i)||unicode.IsLetter(i)
}
func isPalindrome(s string) bool {
if len(s)<2{
return true
}
l :=0
r :=len(s)-1
for l<r{
vl, vr := rune(s[l]), rune(s[r])
if !isValid(vl)&&!isValid(vr){
l++
r--
}else if !isValid(vl){
l++
}else if !isValid(vr){
r--
}else if unicode.ToUpper(vl) != unicode.ToUpper(vr){
return false
}else{
l++
r--
}
}
return true
}
func isValid(i rune)bool{
return unicode.IsDigit(i)||unicode.IsLetter(i)
}