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匹配。

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。否則,它返回子串的索引。

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()方法來檢查字串2是否包含字串1。如果字串2存在於字串1中,則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中,最好使用內建方法,因為它們比簡單方法更最佳化,並且可以提高效能。

更新於:2023年8月14日

瀏覽量:181

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告