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

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

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

我们首先将介绍解决问题的朴素方法,即在String2中找到所有与String1长度相同的子字符串。此外,我们将使用内置方法如match(),includes()和indexOf()方法在String2中找到String1子字符串。

问题说明 − 给定一个不同长度的字符串String1和String2。我们需要检查字符串String1是否作为子字符串存在于字符串String2中。

示例

输入

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

输出

Yes

解释 − 当字符串1作为子串存在于字符串2中时,输出“yes”。

输入

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

输出

No

解释 −它打印No,因为string1不存在于string2中。

输入

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

输出

No

说明 − 由于字符串2的长度小于字符串1的长度,所以打印出No。

方法1

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

步骤

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

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

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

步骤4 − 如果string2[p + q] != string1[q]为真,就退出循环。

步骤5 − 循环迭代后,如果q == len1,则嵌套循环已经进行了总共len1次迭代,即字符串1存在作为子字符串。返回p。

步骤6 − 最后返回-1。

示例

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

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字符串作为参数传递。如果alpha1在alpha2中找不到,它返回-1。否则,它返回子字符串的索引。

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()方法的空间复杂度相同。

方法3

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

示例

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

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。

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中,最好使用内置方法,因为它们比朴素方法更优化,并且它们可以用来提高性能。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程