看到的第一个想法就是使用slice
看答案发现用双指针法
func isPalindrome(s string) bool {
if len(s)<=1{
return true
}
strLower:=strings.ToLower(s)
i,j:=0,len(strLower)-1
for i<j{
for i<j&&!unicode.IsLetter(rune(strLower[i])) && !unicode.IsNumber(rune(strLower[i])){
i++
}
for i<j&&!unicode.IsLetter(rune(strLower[j])) && !unicode.IsNumber(rune(strLower[j])){
j--
}
if strLower[i]!=strLower[j]{
return false
}
i++
j--
}
return true
}
错误的原因,在判断
for i<j&&!unicode.IsLetter(rune(strLower[i])) && !unicode.IsNumber(rune(strLower[i])){
i++
}
for i<j&&!unicode.IsLetter(rune(strLower[j])) && !unicode.IsNumber(rune(strLower[j])){
j--
}
时没有使用了if 没有意识到递增和递减的循环性。
有疑问加站长微信联系(非本文作者)