我实现了以下有效的代码。
bool isPalindrome(const std::string& str)
{
std::string rstr = str;
reverse(rstr.begin(), rstr.end());
if (str == rstr)
return true;
else
return false;
}
但是,我想知道是否有更有效的方法来做到这一点?特别是来自字符串类的函数。
例如,不是创建一个新变量来存储反转的字符串,而是执行类似的操作?
if (str == std::string{ reverse{str.begin(), str.end()})
我知道这行不通,因为 str 是对 const 字符串的引用。我找不到任何利用 STL 函数以更好的方式解决这个问题的代码。
另一个问题,为什么我不能做这样的事情而不是 if 语句?
str == rstr ? return true : return false;
std::equal(str.begin(), str.begin()+str.size()/2, str.rbegin(), str.rbegin()+str.size()/2);
std::equal
取 2 对 4 个迭代器。它将第一个范围与第二个范围进行比较。
对于回文,您只需检查一半(向下取整)字符。
rbegin
是一个反向迭代器——它以相反的顺序迭代字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句