我实现了以下有效的代码。
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
是一个反向迭代器——它以相反的顺序迭代字符串。
关于c++ - 寻找一种使用STL函数检查字符串是否为回文的更有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465481/