125.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func isPalindromeOld(s string) bool {
  7. lower := strings.ToLower(s)
  8. arr := make([]byte, 0)
  9. for i := 0; i < len(lower); i++ {
  10. if (lower[i] >= 'a' && lower[i] <= 'z') || (lower[i] >= '0' && lower[i] <= '9') {
  11. arr = append(arr, lower[i])
  12. }
  13. }
  14. for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 {
  15. if arr[i] != arr[j] {
  16. return false
  17. }
  18. }
  19. return true
  20. }
  21. func isAlphanum(c byte) bool {
  22. lower := c >= 'a' && c <= 'z'
  23. upper := c >= 'A' && c <= 'Z'
  24. numeric := c >= '0' && c <= '9'
  25. return lower || upper || numeric
  26. }
  27. func isEqual(a, b byte) bool {
  28. if a >= 'a' && a <= 'z' {
  29. a = a - 'a' + 'A'
  30. }
  31. if b >= 'a' && b <= 'z' {
  32. b = b - 'a' + 'A'
  33. }
  34. return a == b
  35. }
  36. func isPalindrome(s string) bool {
  37. if len(s) == 0 || len(s) == 1 {
  38. return true
  39. }
  40. for beg, end := 0, len(s)-1; beg < end; {
  41. if !isAlphanum(s[beg]) {
  42. beg++
  43. continue
  44. }
  45. if !isAlphanum(s[end]) {
  46. end--
  47. continue
  48. }
  49. if isEqual(s[beg], s[end]) {
  50. beg++
  51. end--
  52. } else {
  53. return false
  54. }
  55. }
  56. return true
  57. }
  58. func main() {
  59. fmt.Println(isPalindrome(""))
  60. fmt.Println(isPalindrome("How are!! ! rawoh~"))
  61. fmt.Println(isPalindrome("0P"))
  62. }