檢查是否可以透過刪除字串1中的某些字元來形成字串2,而無需重新排序任何字串的字元 - JavaScript


在這個給定的語句中,我們的任務是確定是否可以透過使用Javascript功能從字串1中刪除一些字元來形成字串2,而無需更改任何字串的字元順序。

理解問題

手頭的問題是檢查第二個字串是否可以使用第一個字串形成,而無需更改兩個字串的順序。例如,假設我們有兩個字串:

s1 = "apple"
s2 = "ale"
Output - true

因此,上述字串的輸出應為true,因為第二個字串s2的字元與第一個字串s1的字元順序相同。

另一個例子 -

s3 = "banana"
s4 = "pan"
Output - false

上述例子的輸出為false,因為s4不能透過重新排序字元來使用s3形成。甚至s3中也不存在'p'。

給定問題的邏輯

為了解決上述問題,我們將使用一個簡單的演算法。首先,我們將迭代字串2的每個字元,然後檢查這些字元是否存在於字串1中。如果在字串1中找到這些字元,我們將逐個從字串1中刪除它們。如果找不到字元,並且我們在沒有找到字串2的所有字元的情況下到達字串1的末尾,則不能透過從字串1中刪除字元來形成第二個字串2。

演算法

步驟1:由於我們必須檢查第二個字串的字元是否可以透過不更改其順序來使用第一個字串形成。為此,我們將首先建立一個名為canFormString的函式,在這個函式中,我們將傳遞兩個引數string1和string2。這兩個字串將用於檢查給定的問題。

步驟2:現在我們已經建立了一個用於檢查字元的函式。我們將初始化兩個指標i和j。這兩個指標將分別用於迭代string1和string2。

步驟3:定義指標後,我們將迭代到string2的末尾,並且string2的所有字元都可以在string1中找到。

步驟4:在此步驟中,我們將檢查條件。如果第一個字串的字元等於第二個字串的字元。我們將遞增i和j的值。

步驟5:如果上述條件不成立,我們將只遞增i指標的值。

步驟6:現在我們將檢查條件,如果j的值等於第二個字串的長度,這意味著string2的所有字元都在string1中找到,而沒有更改順序。我們將返回true。

步驟7:如果i的值等於string1的長度,這意味著我們在沒有找到string2的所有字元的情況下到達了string1的末尾。我們將返回false作為輸出。

示例

//Function to check that the string can be formed using first string
function canFormString(string1, string2) {
   //Initialize the pointers
   let i = 0;
   let j = 0;

   while (j < string2.length && i < string1.length) {
      if (string1[i] === string2[j]) {
         i++;
         j++;
      } else {
         i++;
      }
   }

   return j === string2.length;
}

const s1 = "hello i am Neel";
const s2 = "hello";

console.log(canFormString(s1, s2));

輸出

true

複雜度

檢查字串2是否透過不更改兩個字串的順序使用字串1的字元形成的時間複雜度為O(m + n),其中m是字串1的長度,n是字串2的長度。這種複雜度的原因是,我們迭代字串一次以比較字串的字元。程式碼的空間複雜度為O(1),這是一個常數值,因為我們只使用常量空間來儲存布林值。

結論

因此,我們已透過在Javascript中實現程式碼成功完成了給定的問題。因此,此程式碼可用於檢查第二個字串是否使用第一個字串形成,而不更改字串的順序。並且程式碼具有線性時間複雜度,這使得程式碼對於實際使用來說是高效的。

更新於:2023年8月11日

206 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.