给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
代码
// 验证回文字符串
func Test7() {
inputStr := []string{
"A man, a plan, a canal: Panama",
"race a car",
}
validChar := func(a string, index int) bool {
if index >= len(a) {
return false
}
if a[index] >= '0' && a[index] <= '9' {
return true
}
if a[index] >= 'a' && a[index] <= 'z' {
return true
}
if a[index] >= 'A' && a[index] <= 'Z' {
return true
}
return false
}
charEqual := func(a, b byte) bool {
if b > a {
a, b = b, a
}
return a == b || a-('a'-'A') == b
}
f := func(input string) bool {
start, end := 0, len(input)-1
for start < end {
// 找start
for !validChar(input, start) && start <= end {
start++
}
// 找end
for !validChar(input, end) && end >= start {
end--
}
if start == end {
return true
}
if !charEqual(input[start], input[end]) {
return false
}
start++
end--
}
return true
}
for i := 0; i < len(inputStr); i++ {
fmt.Printf("%s %v\n", inputStr[i], f(inputStr[i]))
}
}
运行结果
