題目:驗(yàn)證回文串
給定一個(gè)字符串亿乳,驗(yàn)證它是否是回文串,只考慮字母和數(shù)字字符椿疗,可以忽略字母的大小寫(xiě)。
說(shuō)明: 本題中糠悼,我們將空字符串定義為有效的回文串届榄。
示例1:
輸入: "A man, a plan, a canal: Panama"
輸出: true
示例2:
輸入: "race a car"
輸出: false
思路
- 雙指針遍歷。
- 使用雙指針從兩頭遍歷倔喂,知道
left<=right
那么該字符串就是一個(gè)回文串铝条。 - 在比較過(guò)程中,需要跳過(guò)非字母和數(shù)字的字符滴劲。
實(shí)現(xiàn)
func isPalindrome(s string) bool {
if s == "" {
return true
}
s = strings.ToLower(s)
var (
left, right = 0, len(s) - 1
ans = true
)
for left <= right {
if !_isalnum(s[left]) {
left++
continue
}
if !_isalnum(s[right]) {
right--
continue
}
if s[left] != s[right] {
ans = false
break
}
left++
right--
}
return ans
}
func _isalnum(ch byte) bool {
return (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')
}