反转字符串时间和空间复杂度

2023-12-07

我编写了不同的 python 代码来反转给定的字符串。但是,无法确定其中哪一个是有效的。有人可以指出这些算法在时间和空间复杂度上的差异吗?

def reverse_1(s):
      result = ""
      for i in s : 
          result = i + result
      return result

def reverse_2(s): 
      return s[::-1]

已经有一些解决方案了,但我无法找出时间和空间复杂度。我想知道有多少空间s[::-1]会采取?


甚至无需尝试将其放在板凳上(您可以轻松做到),reverse_1由于很多原因,速度会非常慢:

  • 带索引的循环
  • 不断向字符串添加字符,每次都创建一个副本。

因此,由于循环和索引而变慢,O(n*n)由于字符串副本的时间复杂度,O(n)复杂性,因为它使用额外的内存来创建临时字符串(希望在循环中进行垃圾收集)。

另一方面s[::-1]:

  • 不使用可见循环
  • 返回一个字符串,无需从列表转换为列表
  • 使用来自 python 运行时的编译代码

因此,在时间和空间复杂性以及速度方面你无法击败它。

如果您想要替代方案,您可以使用:

''.join(reversed(s))

但这会慢于s[::-1](它必须创建一个列表,以便join可以构建一个字符串回来)。当需要除反转字符串之外的其他转换时,这很有趣。

请注意,与 C 或 C++ 语言不同(就字符串而言)这不可能反转字符串O(1)空间复杂度是因为不变性字符串:您需要两倍的内存,因为字符串操作无法就地完成(这可以在字符列表上完成,但是strlist转换使用内存)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反转字符串时间和空间复杂度 的相关文章

随机推荐

  • 如何使用 pymongo 获取仅包含 ObjectId 的列表?

    我有以下代码 client MongoClient data base client hkpr restore agents collection data base agents agent ids agents collection f
  • 如何使用正则表达式提取 4 位数字

    我想提取后面的所有数字company id 部分并存储在变量中 我的字符串如下所示 String company company id 4100 data drm user id 572901936637129135 company id
  • 如何使用Pyarrow实现流式写入效果

    我拥有的数据是一种流数据 我想将它们存储到一个 Parquet 文件中 但是 Pyarrow 每次都会覆盖 Parquet 文件 那么我该怎么办呢 我尝试不关闭编写器 但这似乎是不可能的 因为如果我不关闭它 那么我将无法读取该文件 这是包
  • 访问文件时出错。网络连接可能已丢失

    因此 我使用 VBA 代码打开 Excel 文件 并将数据下载到包含代码的工作表中 它有效 现在我收到错误 访问文件时出错 网络连接可能已丢失 我打开代码看看它落在哪里 我以为文件可能已更改位置或名称已更改 当我浏览代码 使用 F8 时 我
  • 如何序列化java中实现的链表?

    我在网上读到 通过将派生对象声明为瞬态 可以省略派生对象的序列化 但是 在链表的情况下 链接是对象之间的内存引用 那么 我应该将其转换为数组并存储数组表示形式吗 Java 序列化的方式如下LinkedList 它获取所有元素并将它们写入Ob
  • 列表 - 如何查找某个项目出现的次数[重复]

    这个问题在这里已经有答案了 可能的重复 如何计算Python中列表项的出现次数 我正在进行一项民意调查 为此 我正在使用 Python 而我所坚持的部分是试图弄清楚如何计算特定事物 例如 杂货店 出现的次数 例如 民意调查 您最常在哪里看到
  • geohash 和最大距离

    前 6 个字符匹配的两个 geohash 两个 geohash 之间的距离最大为 0 61km 前 5 个字符匹配的两个 geohash 两个 geohash 之间的距离最大为 2 5km 问 5 位长度的给定 geohash 的任何一对边
  • CodeIgniter:解析位于 javascript 中的动态语言标题

    我有一个需要本地化的 JavaScript 代码 即 function js proc var some data this text needs to be translated dynamically at runtime 所以我这样重
  • 设置“可见性”后未获取“RelativeLayout get Height()”

    我想要的是 当我单击仪表板按钮时 它将像滑动抽屉一样打开 打开后再次单击它 它将关闭 我使用这个自定义抽屉是因为 SlidingDrawer 已弃用 现在的问题是 它工作正常 除了第一次单击按钮时 它会打开得非常快 没有任何动画 但会正常关
  • 有没有办法在Python Selenium中通过属性查找元素?

    我得到了这样的 html 片段
  • 使用 WMI 和 C# 的 CPU 使用率

    如何使用 WMI 在 C 中检索当前 CPU 使用情况 我看过很多使用性能计数器的帖子 但我需要一个可以与远程计算机一起使用的解决方案 我还找到了一个VB解决方案here 但如果可能的话 我更愿意在 C 中完成此任务 至少可以说 WMI 的
  • Rust 不接收来自 C++ 的 UDP 消息

    我正在使用 UDP 创建服务器 客户端范例 但 Rust 服务器未接收 C 客户端消息 我已经能够成功地进行 Rust 服务器 Rust 客户端和 C 服务器 Rust 客户端通信 这让我相信我的 C 代码存在问题 或者在将 C 缓冲区发送
  • 为什么 x86-64 汇编中参数存储在寄存器中而不是堆栈中?

    在 x86 32 汇编中 参数存储在堆栈中 但在 x86 64 中 参数存储在寄存器中 这是什么原因呢 访问 CPU 寄存器比访问 RAM 快得多 由于 64 位 CPU 有更多通用寄存器 与 64 位无关 只是因为它们更新 更大 因此使用
  • 如何使用有效的 CSS 来定位 IE7 和 IE8?

    我想使用符合 W3C 的 CSS 来定位 IE7 和 IE8 有时修复一个版本的 CSS 并不能修复另一个版本的 CSS 我怎样才能实现这个目标 使用 HTML 和 CSS 明确定位 IE 版本 无需破解 如果您不想对 CSS 进行修改 请
  • 构建Word字段

    除了将文本插入和解析到空白 Word 字段之外 是否有任何方法可以使用 VBA 以编程方式将用户定义的字段和字段代码构建到我自己的模板中 此外 有没有办法让这些字段显示在可用字段列表中 我最近开发了一个使用 Word 的 MACROBUTT
  • 使用后台线程从 url 加载注释。移动或缩放地图视图之前不会显示图钉

    我使用后台线程从 url 加载注释 在移动或缩放地图视图之前 图钉不会显示 我如何更新我的视图 我的观点确实出现了 void viewDidAppear BOOL animated super viewDidAppear animated
  • static const int 和 static int const 有什么区别?

    In this answer使用的OP static int const var 5 在条件编译控制的上下文中 使用之间有区别吗static const int and static int const 例如 static const in
  • 检测 pygtk 中的 ctrl+click 按钮

    我想检测当用户单击按钮时是否按住 ctrl 点击 信号似乎没有向回调传递足够的信息来解决这个问题 如果您可以连接到button press event or button release event代替clicked the event传递
  • Android 对位图的噪点效果

    我正在编写一些函数来在位图上添加噪点效果 我发现类似的问题 向绘图添加噪点效果 位图输出Bitmap Bitmap createBitmap bitmap getWidth bitmap getHeight Bitmap Config AR
  • 反转字符串时间和空间复杂度

    我编写了不同的 python 代码来反转给定的字符串 但是 无法确定其中哪一个是有效的 有人可以指出这些算法在时间和空间复杂度上的差异吗 def reverse 1 s result for i in s result i result r