\\\"Leetcode:

时间和空间复杂度

时间复杂度: 在最坏的情况下,我们迭代 Min(str1,str2) 并且需要重新创建 str1 和 str2,这样整体时间复杂度将是 (str1.length str2.length)将是 O(min(str1,str2) * (str1.length str2.length))

空间复杂度: O(1),因为我们不需要任何额外的空间。

","image":"http://www.luping.net/uploads/20241012/1728725766670a43065f5b5.jpg","datePublished":"2024-11-07T22:30:30+08:00","dateModified":"2024-11-07T22:30:30+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Leetcode:字符串的最大公约数

Leetcode:字符串的最大公约数

发布于2024-11-07
浏览:220

问题陈述 1071. 字符串的最大公约数

对于两个字符串 s 和 t,当且仅当 s = t t t ... t t (即 t 与自身连接一次或多次)时,我们才说“t 除 s”。

给定两个字符串 str1 和 str2,返回使 x 整除 str1 和 str2 的最大字符串 x。

我的思考过程

尽管leetcode将其标记为简单问题,但我必须承认我发现很难立即想出解决方案。

让我回顾一下 leetcode 提供的测试用例并仔细检查它们以解释我的困惑。

测试用例

输入:str1 = "ABCABC", str2 = "ABC"
输出:“ABC”

输入:str1 = "ABABAB", str2 = "ABAB"
输出:“AB”

从问题陈述和测试用例 1 中,我确实确定我们需要输出最大的字符串(“ABC”),连接起来我们可以得到两个字符串。 (默认字符串“ABC”=== str2 和“ABC”“ABC”=== str1)。

然而,查看测试用例 2,我很快意识到我的理解不正确,因为我应该输出“ABAB”,因为这是我可以创建两个字符串的最长字符串。但我开始编写代码并开始制定解决方案。 (菜鸟错误?)

失败/成功的事情

我只能制定出一个解决方案:

  1. 求两个字符串的GCD。
  2. 从最小字符串的长度迭代到GCD
  3. 从最小字符串到当前迭代值取一个子串。
  4. 如果两个字符串都包含该子字符串,则返回该子字符串作为答案。
  5. 如果没有找到字符串,则返回“”。

正如您所看到的,对于 str1 包含 str2 但还包含一些其他附加字符的字符串,我的解决方案失败了。违反了 s = t t ... t t.

的要求

我不得不向neetcode的解决方案寻求帮助。我很快就明白了我的问题:

  1. 我正在寻找字符串长度的 GCD,而不是字符串本身。我需要找到一个字符串,重复这些字符串我可以创建两个字符串而没有任何剩余字符。

  2. 我意识到为什么“ABAB”不能成为测试用例2的答案:

  • 我们需要找到 x 以便将两个字符串均分。因此,以“ABAB”作为字符串,您可以完全创建 str2,但对于 str1,您最终会得到“ABABABAB”。你最终会得到 2 个多余的“AB”,并且不能说你完全通过组合 x.

  • 创建了 str1
  • “ABAB”长度为 4 且“ABABAB”长度为 6。2 个字符串的 GCD = 2。因此输出需要是长度为 2 的字符串。

输出

Leetcode: Greatest Common Divisor of Strings

时间和空间复杂度

时间复杂度: 在最坏的情况下,我们迭代 Min(str1,str2) 并且需要重新创建 str1 和 str2,这样整体时间复杂度将是 (str1.length str2.length)将是 O(min(str1,str2) * (str1.length str2.length))

空间复杂度: O(1),因为我们不需要任何额外的空间。

版本声明 本文转载于:https://dev.to/decoders_lord/leetcode-1071-greatest-common-divisor-of-strings-4dcc?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 Android 中正确实现 CheckBox 的侦听器?
    如何在 Android 中正确实现 CheckBox 的侦听器?
    Android 中的 CheckBox 侦听器在 Android 中实现 CheckBox 侦听器时,必须解决使用标准时面临的常见问题OnCheckedChangeListener 类。标准实现的目标是 RadioGroup 而不是 CheckBox。要解决此问题,请改用CompoundButton...
    编程 发布于2024-11-08
  • Firestore 如何优化社交网络时间线以实现可扩展性?
    Firestore 如何优化社交网络时间线以实现可扩展性?
    使用 Firestore 优化社交网络时间线在设计具有提要和关注功能的社交网络时,数据库可扩展性对于处理潜在问题至关重要大型数据集。 Firebase 的实时数据库带来了可扩展性挑战,特别是在存储用户时间线的方法方面。要解决这些问题,请考虑过渡到 Firestore。优化的数据库结构Firestor...
    编程 发布于2024-11-08
  • 如何解决将对象数组作为函数参数传递时的错误?
    如何解决将对象数组作为函数参数传递时的错误?
    类型提示:对象数组将对象数组作为参数传递给函数时,如果未指定参数类型。例如,考虑以下代码:class Foo {} function getFoo(Foo $f) {}尝试将 Foo 对象数组传递给 getFoo 将导致致命错误:Argument 1 passed to getFoo() must ...
    编程 发布于2024-11-08
  • 为什么 iOS 设备上缺少 CSS 滚动条?
    为什么 iOS 设备上缺少 CSS 滚动条?
    iOS上无法显示带有CSS Overflow的滚动条为iPad开发网站时,使用CSS属性overflow: auto来启用div 内的滚动条可能无效。尽管两指滚动手势功能正常,但滚动条仍然隐藏。尝试同时使用溢出:自动和溢出:滚动不会产生任何结果。iOS行为不幸的是,溢出:自动和滚动都不会在iOS设备...
    编程 发布于2024-11-08
  • Java中如何从线程操作返回值?
    Java中如何从线程操作返回值?
    线程操作返回值在多线程编程中,线程之间的交互往往需要交换数据。一种常见的情况是尝试检索在单独线程中执行的操作的结果。请考虑下面的示例代码:public void test() { Thread uiThread = new HandlerThread("UIHandler"...
    编程 发布于2024-11-08
  • Python 简介:)
    Python 简介:)
    历史 Python 由 Guido van Rossum 创建,首次发布于 1991 年。它旨在优先考虑代码的可读性和简单性,从而提高开发人员的工作效率。 “Python” 的灵感来自 BBC 电视节目 “Monty Python's Flying Circus”,van ...
    编程 发布于2024-11-08
  • 学习 Go 结构最终如何让我爱上编码
    学习 Go 结构最终如何让我爱上编码
    “我仍然记得早期与代码搏斗的日子。 基本的东西?我正要到那里。但后来出现了结构体,一切都变得模糊起来。我不断地破坏东西,我的代码一团糟。我做错了什么? 直到我坐下来,学习了 Go 结构体的基础知识,并开始有效地使用它们,事情才终于有了进展。那是转折点。突然间,代码变得更有组织、更高效、更干净。它改变...
    编程 发布于2024-11-08
  • MERN 堆栈仍然有效吗?
    MERN 堆栈仍然有效吗?
    Remember when the MERN stack was the Beyoncé of web development stacks? It was everywhere, and if you weren’t using it, you were probably missing out ...
    编程 发布于2024-11-08
  • 什么时候需要在 Tkinter 中调用 `mainloop()`?
    什么时候需要在 Tkinter 中调用 `mainloop()`?
    在 Tkinter 应用程序中调用 mainloop在 Tkinter 中,mainloop 是实现窗口渲染和事件处理的基本功能。与流行的看法相反,并不总是需要在交互式 shell 环境中显式调用 mainloop。然而,这种便利在 shell 之外并不适用。mainloop 的作用mainloop...
    编程 发布于2024-11-08
  • 如何解决将静态 C 库与 C++ 代码链接时出现“未定义的引用”错误?
    如何解决将静态 C 库与 C++ 代码链接时出现“未定义的引用”错误?
    对用 C 代码链接静态 C 库时的错误的未定义引用当尝试用 C 代码链接静态 C 库时,您可以尽管修改了链接顺序,但仍遇到“未定义的引用”错误。此问题是由 C 和 C 编译创建的不同符号名称(称为“名称修饰”)引起的。在 C 中,链接器在错误消息中显示分解的符号名称,这可能会造成混淆。使用“nm -...
    编程 发布于2024-11-08
  • 书籍:学习 JavaScript 设计模式
    书籍:学习 JavaScript 设计模式
    本书探讨了 JavaScript 中常见软件设计模式的实现和使用。虽然根据最新的最佳实践,一些示例可能稍微过时,但它们对于维护遗留系统的人来说仍然很有价值。 对于初学者: 它是对软件设计模式的出色介绍。然而,对于那些编程经验有限的人来说,这些模式解决的问题可能不太熟悉。 ...
    编程 发布于2024-11-08
  • 如何在JavaScript中进行稳定排序以保持元素顺序的一致性?
    如何在JavaScript中进行稳定排序以保持元素顺序的一致性?
    JavaScript 中的稳定排序算法对数据进行排序时,保留相等元素的原始顺序对于稳定的排序算法至关重要。在这种情况下,我们的目标是按给定顺序对具有特定键的对象数组进行排序,同时保持元素顺序一致性。稳定排序技术有趣的是,甚至非稳定排序函数可以实现稳定排序。通过在排序前捕获每个元素的初始位置,我们可以...
    编程 发布于2024-11-08
  • npm 与 npx
    npm 与 npx
    如果您一直在使用 Node.js,您可能遇到过 npm 和 npx。 虽然它们听起来很相似并且都是 Node.js 生态系统不可或缺的一部分,但它们有不同的用途。这篇文章将探讨 npm 和 npx 之间的差异,帮助您了解何时以及为何使用它们。 什么是NPM? NPM 是 Node ...
    编程 发布于2024-11-08
  • Python 中的链式赋值如何工作?它们真的相当于多个顺序分配吗?
    Python 中的链式赋值如何工作?它们真的相当于多个顺序分配吗?
    理解 Python 中的链式赋值Python 中的链式赋值,例如“x = y = somefunction()”这样的表达式,引发了人们的关注关于它们与多个顺序赋值的等价性的讨论(“x = somefunction(); y = somefunction()”)。为了澄清这个问题,让我们详细探讨一下...
    编程 发布于2024-11-08
  • 如何使用 Gorilla Websocket 在 Go Websocket 应用程序中向特定客户端发送目标消息?
    如何使用 Gorilla Websocket 在 Go Websocket 应用程序中向特定客户端发送目标消息?
    Go with Gorilla Websocket 中的特定客户端消息传递在 websocket 通信领域,向特定客户端发送消息的能力对于构建实时应用程序至关重要。然而,默认的 websocket 示例通常演示同时向所有连接的客户端广播消息。为了解决这个问题,我们可以采用一种方法,为每个客户端分配一...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3