当前位置: 面试刷题>> 验证回文串(经典算法150题)


题目描述

验证一个字符串是否为回文串。回文串是指正着读和反着读都一样的字符串(忽略大小写和空格)。

示例

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

解释: 忽略大小写和空格后,"amanaplanacanalpanama" 是一个回文串。

PHP 代码示例

function isValidPalindrome($s) {
    // 去除空格并转换为小写
    $cleanString = strtolower(str_replace(' ', '', $s));
    
    $length = strlen($cleanString);
    $left = 0;
    $right = $length - 1;
    
    while ($left < $right) {
        if ($cleanString[$left] !== $cleanString[$right]) {
            return false;
        }
        $left++;
        $right--;
    }
    
    return true;
}

// 测试示例
echo isValidPalindrome("A man, a plan, a canal: Panama") ? "true" : "false"; // 输出 true

Python 代码示例

def isValidPalindrome(s: str) -> bool:
    # 去除空格并转换为小写
    clean_string = ''.join(c.lower() for c in s if c.isalnum())
    
    left, right = 0, len(clean_string) - 1
    
    while left < right:
        if clean_string[left] != clean_string[right]:
            return False
        left += 1
        right -= 1
    
    return True

# 测试示例
print(isValidPalindrome("A man, a plan, a canal: Panama"))  # 输出 True

JavaScript 代码示例

function isValidPalindrome(s) {
    // 去除空格并转换为小写
    const cleanString = s.replace(/[\W_]/g, '').toLowerCase();
    
    let left = 0;
    let right = cleanString.length - 1;
    
    while (left < right) {
        if (cleanString[left] !== cleanString[right]) {
            return false;
        }
        left++;
        right--;
    }
    
    return true;
}

// 测试示例
console.log(isValidPalindrome("A man, a plan, a canal: Panama")); // 输出 true

在这三个示例中,我们都首先对输入字符串进行了预处理,去除了空格和非字母数字字符,并将所有字符转换为小写,以确保比较时不受这些因素影响。随后,我们使用了双指针技巧来检查字符串是否为回文串。这种解法的时间复杂度为 O(n),其中 n 是字符串的长度。

推荐面试题