当前位置: 面试刷题>> 验证回文串(经典算法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 是字符串的长度。