125 验证回文串-简单
题目:
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
解题思路
去除不需要比较的字符,然后双指针首尾对撞。
// date 2022/10/17
func isPalindrome(s string) bool {
s = strings.ToLower(s)
var res string
for i := 0; i < len(s); i++ {
if 'a' <= s[i] && s[i] <= 'z' || '0' <= s[i] && s[i] <= '9' {
res += string(s[i])
}
}
i, j := 0, len(res)-1
for i < j {
if res[i] != res[j] {
return false
}
i++
j--
}
return true
}
// 写法2
// 双指针,直接在原字符串上操作,只判断字母和数字字符
func isPalindrome(s string) bool {
s = strings.ToLower(s)
left, right := 0, len(s)-1
for left < right {
if !isCharNum(s[left]) {
left++
continue
}
if !isCharNum(s[right]) {
right--
continue
}
if s[left] != s[right] {
return false
}
left++
right--
}
return true
}
func isCharNum(x uint8) bool {
if x >= 'a' && x <= 'z' || x >= '0' && x <= '9' {
return true
}
return false
}
最后更新于