1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package main
- import (
- "fmt"
- "strings"
- )
- func isPalindromeOld(s string) bool {
- lower := strings.ToLower(s)
- arr := make([]byte, 0)
- for i := 0; i < len(lower); i++ {
- if (lower[i] >= 'a' && lower[i] <= 'z') || (lower[i] >= '0' && lower[i] <= '9') {
- arr = append(arr, lower[i])
- }
- }
- for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 {
- if arr[i] != arr[j] {
- return false
- }
- }
- return true
- }
- func isAlphanum(c byte) bool {
- lower := c >= 'a' && c <= 'z'
- upper := c >= 'A' && c <= 'Z'
- numeric := c >= '0' && c <= '9'
- return lower || upper || numeric
- }
- func isEqual(a, b byte) bool {
- if a >= 'a' && a <= 'z' {
- a = a - 'a' + 'A'
- }
- if b >= 'a' && b <= 'z' {
- b = b - 'a' + 'A'
- }
- return a == b
- }
- func isPalindrome(s string) bool {
- if len(s) == 0 || len(s) == 1 {
- return true
- }
- for beg, end := 0, len(s)-1; beg < end; {
- if !isAlphanum(s[beg]) {
- beg++
- continue
- }
- if !isAlphanum(s[end]) {
- end--
- continue
- }
- if isEqual(s[beg], s[end]) {
- beg++
- end--
- } else {
- return false
- }
- }
- return true
- }
- func main() {
- fmt.Println(isPalindrome(""))
- fmt.Println(isPalindrome("How are!! ! rawoh~"))
- fmt.Println(isPalindrome("0P"))
- }
|