125. 验证回文串

image.png

  1. func isPalindrome(s string) bool {
  2. // 判断是否是需要比较的合法回文字符,
  3. // 题目说空格是合法的回文字符很误导人, 其实这个地方需要排除空格
  4. isValid := func(v rune) bool {
  5. return unicode.IsDigit(v) || unicode.IsLetter(v)
  6. }
  7. i, j := 0, len(s)-1
  8. for i < j {
  9. for i<len(s)&&!isValid(rune(s[i])){
  10. i++
  11. }
  12. for j>=0&&!isValid(rune(s[j])){
  13. j--
  14. }
  15. if i<len(s)&&j>0&&(unicode.ToUpper(rune(s[i])) != unicode.ToUpper(rune(s[j]))) {
  16. return false // 如果都合法如果不相等则直接返回
  17. } else { // 如果相等则移动两个指针
  18. i++
  19. j--
  20. }
  21. }
  22. return true
  23. }
  24. func isValid(i rune)bool{
  25. return unicode.IsDigit(i)||unicode.IsLetter(i)
  26. }
  1. func isPalindrome(s string) bool {
  2. if len(s)<2{
  3. return true
  4. }
  5. l :=0
  6. r :=len(s)-1
  7. for l<r{
  8. vl, vr := rune(s[l]), rune(s[r])
  9. if !isValid(vl)&&!isValid(vr){
  10. l++
  11. r--
  12. }else if !isValid(vl){
  13. l++
  14. }else if !isValid(vr){
  15. r--
  16. }else if unicode.ToUpper(vl) != unicode.ToUpper(vr){
  17. return false
  18. }else{
  19. l++
  20. r--
  21. }
  22. }
  23. return true
  24. }
  25. func isValid(i rune)bool{
  26. return unicode.IsDigit(i)||unicode.IsLetter(i)
  27. }