c++ - 如何检查 C++ STL 列表是否为回文?
问题描述
我想检查给定的 C++ STL 列表是否是回文的?
bool isPalindromic(list <int> c);
int main(){
list<int> l;
l.push_front(12);
l.push_front(35);
l.push_front(34);
l.push_front(35);
l.push_front(12);
isPalindromic(l);
}
output : true
解决方案
您可以使用std::equal
检查从头开始的列表是否等于从尾端开始的列表。std::equal的cppreference 页面甚至有一个例子。
编辑(根据要求):基于 cppreference 提供的示例:
std::equal(s.begin(), s.begin() + s.size()/2, s.rbegin());
上面的行检查一个字符串是否是回文。但在我们的例子中它不起作用,因为列表的begin()
返回BidirectionalIterator
,而不是RandomAccessIterator
字符串的begin()
,所以我们不能做s.begin() + s.size()/2
部分。为了使它工作,我们应该将我们的代码更改为:
bool is_palindrome(const std::list<int>& l) //use templated version std::list<T> if needed
{
return std::equal(l.begin(), l.end(), l.rbegin());
}
这当然不是完美的,因为它从列表的开头迭代到结尾,虽然它可能只是在中间结束,但它很简单并且有效。
推荐阅读
- javascript - 为什么 React 不显示来自组件的内容?
- javascript - 未捕获的 ReferenceError:在 __webpack_require__ 的 Object.babel-polyfill 中未定义 require
- github - 如何在 Github 中自动将一个分支合并到另一个分支中?
- require - 在 Nashorn JavaScript 引擎中,如何从文件系统中读取文件?
- python - python - 在主 x 轴旁边制作一个附加(寄生轴)
- javascript - React 启动和构建导致堆内存不足
- usrp - USRP - 子板安装问题
- django-rest-framework - 如果我不更新其余框架中的图像,我将无法更新数据
- java - 使用 microsoft EWS java api 阅读带有乱码的电子邮件失败
- java - 如何从控制台隐藏输出行