c++ - 寻找一种使用STL函数检查字符串是否为回文的更有效方法

标签 c++

我实现了以下有效的代码。

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/

相关文章:

c++ - 包含时没有这样的文件 iostream.h

c++ - 如何在 64 位 Solaris 上安装 AWS C++ SDK 库

c++ - 具有自定义对象指针列表的迭代器

c++ - 大型阵列的幂集

c++ - 跨平台汇编 ((x64 || x86) && (Microsoft x64 || SystemV))

c++ - QTableWidget 随机加载效率低下 - C++

c++ - Qt 旋转图像 -> 多边形

c++ - 为什么我们必须从一元前缀运算符重载返回 const 引用

c++ - 我得到的掩护问题为 "Wrapper object use after free (WRAPPER_ESCAPE)"

c++ - typedef 具有所有默认参数的模板