pta验证回文串
时间: 2025-06-30 21:38:56 浏览: 11
### PTA 验证回文串算法实现
PTA 中验证回文串的任务通常涉及判断给定字符串是否为回文结构。以下是基于 C++ 的一种高效实现方式,其核心逻辑来源于双指针方法[^3]。
#### 算法描述
1. 使用两个指针 `left` 和 `right` 分别指向字符串的起始和结尾。
2. 跳过所有非字母数字字符,直到找到有效的比较对象。
3. 对于有效字符,将其统一转为小写后进行对比。
4. 如果发现任意一对字符不匹配,则立即返回 `false`;如果全部匹配成功,则最终返回 `true`。
#### 代码实现
以下是一个完整的 C++ 版本实现:
```cpp
#include <iostream>
#include <cctype> // 提供 isalnum 和 tolower 函数
using namespace std;
bool isPalindrome(const string& s) {
int left = 0;
int right = s.size() - 1;
while (left < right) {
// 左侧跳过非字母数字字符
while (left < right && !isalnum(s[left])) {
left++;
}
// 右侧跳过非字母数字字符
while (left < right && !isalnum(s[right])) {
right--;
}
// 比较当前左右两侧的有效字符
if (tolower(s[left]) != tolower(s[right])) {
return false; // 若不同则不是回文
}
// 移动指针继续检查下一组字符
left++;
right--;
}
return true; // 所有对应字符均相同则是回文
}
int main() {
string input;
getline(cin, input); // 获取一行输入数据
if (isPalindrome(input)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
```
此程序能够处理各种边界情况,例如空字符串、仅含特殊符号的情况以及大小写字母混合的情形[^3]。
#### 测试案例解析
- **测试用例 1**:
输入 `"level"`,输出 `"Yes"`。解释:该字符串正向逆向一致,因此是回文串[^5]。
- **测试用例 2**:
输入 `"1 + 2 = 2 + 1 ="`,输出 `"No"`。解释:去除无关字符后得到序列 `12=21=`,显然前后不对称[^5]。
---
### Python 实现补充
对于熟悉 Python 的开发者来说,也可以采用更简洁的方式完成同样功能:
```python
def is_palindrome(s: str) -> bool:
filtered_chars = [char.lower() for char in s if char.isalnum()]
return filtered_chars == filtered_chars[::-1]
# 主函数调用部分
if __name__ == "__main__":
test_str = input().strip()
print("Yes" if is_palindrome(test_str) else "No")
```
上述脚本通过列表推导式快速过滤掉非法字符并构建新的纯字母数字序列,最后利用切片技术轻松判定两者关系[^4]。
---
阅读全文
相关推荐
















