2825。使用循环增量
使字符串成为子序列
[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
说明:
在此示例中,可以证明不可能最多一次使用该操作使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的长度。
空间复杂性:
-
- 空间复杂性是
o(1)- ,因为我们只使用一些指针,并且不需要取决于输入大小的额外空间。
- 此解决方案有效地检查是否可以将STR2作为STR1的子序列,最多可以用一个环状增量操作。
[2
如果您发现此系列有帮助,请考虑在Github上给
如果您想要这样的更多有用的内容,请随时关注我:
[2
[2