JavaScript程式檢查字串是否可以透過最多X次順時針迴圈移位從另一個字串形成


字串的順時針迴圈移位是指將字串的字元旋轉到字母順序中的下一個字元。對於每次迴圈移位,字元都會轉換為下一個字元,如果在某些旋轉後沒有字元存在(因為“z”是英語字母表的最後一個字元),那麼在這種情況下,我們可以假設字元在迴圈中,並再次從英語字母表的第一個字元開始。

我們將得到兩個字串,我們可以最多旋轉第一個字串的每個字元x次,並在進行一定數量的所需和最大更改後,找出這兩個字串是否相等。如果這兩個字串在每次迭代的最大X次移位內相等,那麼我們將列印yes,否則列印no。

示例

示例1

例如,我們得到字串1:“abcdef”,第二個字串是:“cccdfi”,並且可能的最大旋轉次數為3。

輸出:Yes

解釋:對於第一個字元“a”,我們將旋轉它2次,並將得到“c”

對於第二個字元“b”,我們將旋轉它1次,並將得到“c”

無需旋轉“c”和“d”。

對於字元“e”和“f”,我們需要分別旋轉1次和3次。

因此,我們可以在最多3次旋轉中從字串1生成字串2。

示例2

我們得到字串1 'abcdef',第二個字串是:'daddgh',並且可能的最大旋轉次數為2。

輸出:No

解釋:對於第一個字元,我們需要三次旋轉才能將“a”轉換為“d”,這超過了允許的最大值。

對於第二個字元,我們需要25次旋轉才能將“b”轉換為“a”,這超過了允許的最大值。

同樣,對於“e”和“f”也不可能。

方法

從示例中,我們可以瞭解到我們只需要遍歷字串一次並檢查每個字元。讓我們看看步驟

  • 首先,我們將獲取兩個字串的長度並進行比較,如果它們不相等,那麼我們將無法將第一個字串轉換為另一個字串。

  • 我們將遍歷字串,並對每個字元檢查兩件事。

  • 如果第二個字串的字元小於第一個字串,或者兩個字元之間的差值大於給定數字。

  • 如果上述情況為真,那麼我們就無法到達那裡並返回false。

  • 否則我們將返回true並根據它列印結果。

示例

// defining the function to check if the given string can
// be converted to another or not
function check(string1, string2, number){

   // getting the length of the string1
   var len1 = string1.length
   var len2 = string2.length
   
   // if length of both the given strings is not equal then its impossible
   if(len1 != len2){
      return false;
   }
   
   // traversing over the array
   for(var i = 0; i<len1; i++) {
      if(string1[i] > string2[i] || (string2[i]-string1[i] > number)){
         return false;
      }
   }
   return true;
}

// defining the string
var string1 = "abcdef";
var string2 = "cccdfi";
var number = 3;
if(check(string1,string2,number)){
   console.log("Yes, we can convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}
else{
   console.log("No, we cannot convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}
string2 = "daddgh"
number = 2;
if(check(string1,string2,number)){
   console.log("Yes, we can convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}
else{
   console.log("No, we cannot convert string '" + string1 + "' to string '" + string2 + "' in given " + number + " number of rotations ");
}

輸出

Yes, we can convert string 'abcdef' to string 'cccdfi' in given 3 number of rotations 
No, we cannot convert string 'abcdef' to string 'daddgh' in given 2 number of rotations 

時間和空間複雜度

上述程式碼的時間複雜度為O(N),其中N是字串中存在的字元數。我們只遍歷字串一次,這使得程式的時間複雜度為線性。

上述程式碼的空間複雜度為O(1),因為我們沒有使用任何額外的空間。

結論

在本教程中,我們實現了一個JavaScript程式,用於兩個給定的字串和一個數字,該數字指示我們可以將單個字元旋轉多少次到其字串的順時針方向,任務是找出這兩個字串是否相等。上述程式碼的時間複雜度為O(N),它是線性的,而上述程式碼的空間複雜度為O(1)。

更新於: 2023年4月13日

114次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告