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


### 题目描述 验证一个字符串是否为回文串。回文串是指正着读和反着读都一样的字符串(忽略大小写和空格)。 ### 示例 输入: "A man, a plan, a canal: Panama" 输出: true 解释: 忽略大小写和空格后,"amanaplanacanalpanama" 是一个回文串。 ### PHP 代码示例 ```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 代码示例 ```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 代码示例 ```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 是字符串的长度。