JavaScript程序:检查字符串是否为另一个字符串的子串


在这个问题中,我们需要确保字符串String2是否包含字符串String1作为子串。

我们将首先看到解决问题的简单方法,在String2中查找与String1匹配的所有长度与String1相同的子串。此外,我们将使用内置方法,如match()、includes()和indexOf()方法来查找String2中的String1子串。

问题陈述 - 我们给定两个不同大小的字符串String1和String2。我们需要检查字符串String1是否作为子串存在于字符串String2中。

示例

输入

string1 = "tutor"; string2 = "pointtutorial";

输出

Yes

说明 - 它打印“yes”,因为字符串1作为子串存在于字符串2中。

输入

string1 = "cde"; string2 = "pointtutorial";

输出

No

说明 - 它打印“No”,因为字符串1不存在于字符串2中。

输入

string1 = "trsedf"; string2 = "rtel";

输出

No

说明 - 它打印“No”,因为字符串2的长度小于字符串1。

方法1

在这种方法中,我们将查找所有长度等于字符串1长度的子串。之后,我们将它与字符串1进行匹配,如果它们相等,我们可以说字符串2包含字符串1作为子串。

算法

步骤1 - 定义len1和len2变量,并分别用字符串1和字符串2的长度初始化它们。

步骤2 - 从字符串2的第0个索引到(len2 – len1)个索引开始遍历字符串2。

步骤3 - 使用嵌套循环,进行len1次迭代。

步骤4 - 如果string2[p + q] != string1[q]为真,则中断循环。

步骤5 - 循环迭代之后,如果q == len1,则嵌套循环已完成总共len1次迭代,因为字符串1作为子串存在。返回p。

步骤6 - 最后返回-1。

示例

这里将alpha2[p+q]与alpha[q]匹配的目的是将从字符串2中p索引开始的子串与字符串1匹配。

Open Compiler
function S1isSubOfS2(alpha1, alpha2) { // finding the length of strings var len1 = alpha1.length; var len2 = alpha2.length; // Traverse the alpha2 to find alpha1 for (var p = 0; p <= len2 - len1; p++) { var q; for (q = 0; q < len1; q++) { if (alpha2[p + q] != alpha1[q]) break; } if (q == len1) return p; } return -1; } var string1 = "tutor"; var string2 = "pointtutorial"; if (S1isSubOfS2(string1, string2) != -1) { console.log("String1 is present in String2 as a substring."); } else { console.log("String 1 is not present in String2 as a substring."); }

输出

String1 is present in String2 as a substring.

时间复杂度 - O(len1*len2),因为我们遍历字符串2并查找从索引p开始的长度为len1的子串。

空间复杂度 - O(1),因为我们没有使用动态空间。

方法2

在这种方法中,我们将使用JavaScript的内置indexOf()方法。indexOf()方法允许我们在另一个字符串中查找字符串中特定字符的索引。

示例

在这个例子中,我们使用alpha2字符串作为indexOf()方法的参考,并将alpha1字符串作为参数传递。如果在alpha2中找不到alpha1,则返回-1。否则,它返回子串的索引。

Open Compiler
function S1isSubOfS2(alpha1, alpha2) { // Using the indexOf() method return alpha2.indexOf(alpha1); } var string1 = "tutor"; var string2 = "pointtutorial"; if (S1isSubOfS2(string1, string2) != -1) { console.log("String1 is present in String2 as a substring."); } else { console.log("String 1 is not present in String2 as a substring."); }

输出

String1 is present in String2 as a substring.

时间复杂度 - O(n),与indexOf()方法的时间复杂度相同。

空间复杂度 - O(1),与indexOf()方法的空间复杂度相同。

Learn JavaScript in-depth with real-world projects through our JavaScript certification course. Enroll and become a certified expert to boost your career.

方法3

在这种方法中,我们将使用includes()方法来检查字符串2是否包含字符串1。如果字符串2存在于字符串1中,则includes()方法返回true。否则,它返回false。

示例

在这个例子中,如果includes()方法返回true,我们从S1isSubOfS2()函数返回1。否则,我们返回-1。

Open Compiler
function S1isSubOfS2(alpha1, alpha2) { // Using the includes() method if (alpha2.includes(alpha1)) { return 1; } return -1; } var string1 = "acd"; var string2 = "efadef"; if (S1isSubOfS2(string1, string2) != -1) { console.log("String1 is present in String2 as a substring."); } else { console.log("String 1 is not present in String2 as a substring."); }

输出

String 1 is not present in String2 as a substring.

时间复杂度 - O(n),与includes()方法的时间复杂度相同。

空间复杂度 - O(1),与includes()方法的空间复杂度相同。

方法4

在第四种方法中,我们将使用JavaScript的match()方法。match()方法用于在特定字符串中搜索特定模式,并接受字符串或正则表达式作为参数。如果找不到匹配项,则返回null。否则,它返回一个包含所有匹配项的数组。

示例

在这个例子中,我们通过传递alpha1字符串作为参数来执行match()方法。如果找到匹配项,我们返回匹配索引。否则,我们返回-1。

Open Compiler
function S1isSubOfS2(alpha1, alpha2) { // Using the match() method var result = alpha2.match(alpha1); if (result != null) { return result.index; } return -1; } var string1 = "acd"; var string2 = "efacdef"; if (S1isSubOfS2(string1, string2) != -1) { console.log("String1 is present in String2 as a substring."); } else { console.log("String 1 is not present in String2 as a substring."); }

输出

String1 is present in String2 as a substring.

时间复杂度 - O(n)

空间复杂度 - O(1)

我们学习了四种解决在字符串2中查找字符串1作为子串的问题的方法。第一种方法是简单的方法,其时间复杂度高于其他方法。在JavaScript中,最好使用内置方法,因为它们比简单方法更优化,并且可以提高性能。

更新于:2023年8月14日

浏览量:181

启动您的职业生涯

完成课程获得认证

开始学习
广告