LeetCode125.验证回文串Golang版
1. 问题描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
2. 思路
分析题目,拿到的是一个字符串,需要先把字符串处理成只含有字母(ASCII码小写97~122和大写65 ~ 90)和数字(ASCII码 65 ~ 90)。
3. 代码
func isPalindrome(s string) bool {
sByte := []byte(s)
index := 0
for i := 0; i < len(sByte); i++ {
// 把大写字母变为小写字母
sByte[i] = sByte[i] | 32
// 筛选字母和数字
if sByte[i] >= 97&&sByte[i] <= 122 || sByte[i] >= 48&&sByte[i] <= 57 {
sByte[index] = sByte[i]
index++
}
}
// sByte[0] ~ sByte[k] 为处理好的字符串
k := index - 1
for j := 0; j < k; j++ {
if sByte[j] != sByte[k] {
return false
}
k--
}
return true
}
func isPalindrome(s string) bool {
s = strings.ToLower(s)
left, right := 0, len(s) - 1
for left < right {
if left < right && !isChar(s[left]) {
left++
}
if left < right && !isChar(s[right]) {
right--
}
if s[left] != s[right] {
return false
}
left++
right--
}
return true
}
func isChar(e byte) bool {
if (e >= 'a' && e <= 'z') || (e >= 'A' && e <= 'Z') {
return true
}
return false
}