」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 通過循環增量使字符串成為子序列

通過循環增量使字符串成為子序列

發佈於2025-05-01
瀏覽:100

2825。使用循环增量Make String a Subsequence Using Cyclic Increments使字符串成为子序列 [2 [2

您得到了两个

0- indexed

strings str1 and str2。

在str1中的索引的设置递增到下一个字符

循环

返回如果可以通过执行操作,以及false否则

,将str2成为str1的子序列。

注意:字符串的子序列是一个新的字符串,它是通过删除字符(可能没有的)而不打扰其余字符的相对位置而从原始字符串形成的新字符串。 [2

output:

说明:在str1中选择索引2。 成为'd'。 因此,str1变为“ abd”,而str2现在是一个子序列。因此,返回true。

[2

output:
  • 说明:在str1中选择索引0和1。
  • 因此,str1变为“ AD”,Str2现在是一个子序列。因此,返回true。
  • [2
    • false
    说明:
  • 在此示例中,可以证明不可能最多一次使用该操作使STR2成为STR1的子序列。

因此,返回false。

    [2
  • 1 5
  • 1 5 str1和str2仅由小写字母组成。
  • 暗示:
    • 考虑我们将分别递增的索引。
    • 我们可以维护两个指针:用于str1的指针I和sTR2指针J,同时确保它们保持在字符串的范围内。
    • 如果str1 [i]和str2 [j]匹配,或者增加str1 [i]匹配str2 [j],我们会增加两个指示器;否则,我们仅递增指针i。
    如果J处于str2的末尾,则可以使STR2成为str1的子序列,在我们找不到匹配项之后。

解决方案:

我们需要检查是否可以通过对STR1中的任何字符进行一次环状增量操作来使STR2成为STR1的子序列
    解释:
  • 我们将使用两个指针,用于str1和j for str2。
  • 如果str1 [i]上的字符匹配str2 [j],我们将两个指针向前移动。
  • 如果可以将str1 [i]递增以匹配str2 [j](循环),我们会尝试匹配它们,然后移动两个指针。 如果以上条件都不成立,我们只将指针i移动为str1。 最后,如果我们可以匹配str2的所有字符,那么可以使str2成为str1的子序列,否则不能。
  • 让我们在PHP中实现此解决方案: 2825。使用循环增量将字符串作为子序列。
    解释:

两个指针:i和j分别初始化为str1和str2的开始。

    :在循环中,我们检查str1 [i]和str2 [j]的字符是否相同,或者我们是否可以将str1 [i]递增以匹配str2 [j]。
  • 使用(ord($ str1 [$ i])1- ord('a'))%26处理环状递增条件,该数检查是否可以增加str1 [i]以匹配str2 [j]。
  • 子序列检查:如果我们完全通过str2迭代(即j == m),则表示str2是str1的子序列。否则,不是。
  • 时间复杂性:

算法一次通过str1迭代,并且仅检查str2中的每个字符一次,因此时间复杂度为,其中n是str1的长度。

    空间复杂性:
  1. 空间复杂性是
  2. o(1)
  3. ,因为我们只使用一些指针,并且不需要取决于输入大小的额外空间。
  4. 此解决方案有效地检查是否可以将STR2作为STR1的子序列,最多可以用一个环状增量操作。 [2
  5. 如果您发现此系列有帮助,请考虑在Github上给

如果您想要这样的更多有用的内容,请随时关注我: [2 [2

版本聲明 本文轉載於:https://dev.to/mdarifulhaque/2825-make-string-a-subsequence-using-cyclic-increments-4c8a?1如有侵犯,請聯繫[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3