当前位置: 首页 > 知识库问答 >
问题:

如何在O(1)复杂度(运行时)中反向一个字符串?[关闭]

池阳伯
2023-03-14
    null

共有1个答案

太叔航
2023-03-14

不能用O(1)时间反向字符串,但可以用O(1)空间复杂度反向。

在单个操作中反转字符串

最有可能的是在one-liner,因为连“操作”到底是什么都不清楚。

您可以使用std::reverse算法来反转一行中的字符串:

#include <string>
#include <algorithm>

int main()
{
    std::string str = "Hello world!";
    std::reverse(str.begin(), str.end());
    std::cout << "reverse is: \"" << str << '\"' << std::endl;
}

输出:

reverse is: "!dlrow olleH"

或者你不妨用一个简单的循环来做:

for (size_t i=0; i<str.size()/2; ++i)
    std::swap(str[i], str[str.size()-1-i);
 类似资料:
  • 下面是链接:array reversed() 在讨论部分的最后,它说复杂性O(1),我相信这是关于时间复杂性的,如何反转一个数组需要O(1)时间?

  • 问题内容: 在给定CharSequence的情况下,标准Java库中是否有任何设施可以在O(1)时间中产生相反的结果? 我想这很容易实现,只是想知道它是否已经存在。(我怀疑未提供此功能的原因是因为“简单”方式实际上会破坏多字符代码点- 但在许多情况下,我们知道我们没有处理这些问题)。 谢谢 更新 嘿,大多数人认为这个“不可能”的好家伙有点可笑!好吧,实际上(从概念上来说)是微不足道的-伪java可

  • 问题内容: 我打算对StringBuilders中的最后一个字符进行很多删除。使用的解决方案对我来说很好。但是,由于这些删除将处于循环中,因此我需要知道其复杂性。 据我了解,该操作只是减少了StringBuilder对象的一些私有属性,并且不对字符本身执行任何复制/克隆/复制操作,因此它的时间为O(1),应该可以快速运行。 我对吗? 问题答案: 从文档中: 设置字符序列的长度。序列更改为新的字符序

  • 问题内容: 从链接列表标签Wiki摘录: 链表是一种数据结构,其中的元素包含对下一个(以及可选的上一个)元素的引用。链接列表可 在任何位置 提供 O(1)插入和删除 ,O(1)列表串联,以及在前(和可选)后位置的O(1)访问以及对下一个元素的O(1)访问。随机访问具有O(N)的复杂度,通常没有实现。 (强调我的) 令我惊讶的是,该列表如何以比简单 读取 该索引低的复杂度 插入 一个随机索引? __

  • 问题内容: 在Java 6之前,我们在上有一个固定时间的子字符串。在Java 7中,为什么要使用复制数组并降级到线性时间复杂度? 问题答案: 在Oracle错误#4513622中讨论了为什么要做出决定:(str)保留字段的子字符串会阻止对象的GC: 如示例中那样调用String.substring时,未分配用于存储的新字符数组。它使用原始String的字符数组。因此,支持原始字符串的字符数组在子字

  • 问题内容: 切片Python字符串的时间复杂度是多少?鉴于Python字符串是不可变的,我可以想象对它们进行切片或取决于切片的实现方式。 我需要编写一个遍历(可能很大)字符串的所有后缀的函数。我可以通过将后缀表示为整个字符串的元组和一个索引以开始从中读取字符来避免对字符串进行切片,但这很丑陋。相反,如果我天真地像这样写我的函数: … …将其时间复杂度是或,其中是? 问题答案: 简短的答案:通常是切