c++双指针算法判断一个数是否回文
时间: 2024-10-27 16:04:24 浏览: 7
在C++中,双指针算法是一种常见的解决数组、链表等问题的有效技巧,特别是在检查字符串或数字是否为回文的情况下。回文是指正读反读都一样的序列,如"level"、"121"等。
对于整数或字符串类型的回文判断,我们可以使用两个指针,一个从前往后移动(通常称为快指针),另一个从后往前移动(慢指针)。开始时,两指针分别指向数串的首尾字符。然后:
1. 比较快慢指针所指的字符是否相等。如果相等,则继续向中间移动;如果不等,则说明不是回文,直接返回false。
2. 如果快指针未到达中间位置(即未越过慢指针),则继续比较下一对字符。
3. 当快指针超过慢指针时,意味着已经完成了一半的比较,剩下的部分肯定也是相同的,因为它们是对称的。
以下是简单的C++代码示例:
```cpp
bool isPalindrome(int x) {
if (x < 0) return false; // 负数不是回文
int left = 0, right = std::to_string(x).length() - 1;
while (left < right) {
if (std::tolower(std::string::char_at(std::to_string(x).c_str(), left)) !=
std::tolower(std::string::char_at(std::to_string(x).c_str(), right))) {
return false;
}
left++;
right--;
}
return true;
}
```
在这个例子中,我们首先处理了负数的情况,接着用`std::string::char_at`获取字符并忽略大小写做比较。当两个指针相遇或交错时,函数会返回true,表示给定的数是回文。
阅读全文