125. 验证回文串

题目:验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明: 本题中,我们将空字符串定义为有效的回文串。

示例1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例2:

输入: "race a car"
输出: false

思路

  1. 双指针遍历。
  2. 使用双指针从两头遍历,知道left<=right那么该字符串就是一个回文串。
  3. 在比较过程中,需要跳过非字母和数字的字符。

实现

func isPalindrome(s string) bool {
    if s == "" {
        return true
    }

    s = strings.ToLower(s)
    var (
        left, right = 0, len(s) - 1
        ans         = true
    )

    for left <= right {
        if !_isalnum(s[left]) {
            left++
            continue
        }

        if !_isalnum(s[right]) {
            right--
            continue
        }

        if s[left] != s[right] {
            ans = false
            break
        }

        left++
        right--
    }

    return ans
}

func _isalnum(ch byte) bool {
    return (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。