JavaScript程式:檢查字串是否可以透過旋轉另一個字串d位得到


字串旋轉是指將字串的字元向左或向右移動一個索引,一端的值可能會儲存在另一端。我們將得到兩個字串,我們必須將第二個字串向左或向右旋轉給定次數 (d),並檢查兩個字串是否相等。我們將編寫帶有註釋、解釋和關於程式時間和空間複雜度的詳細討論的正確程式碼。

示例

如果我們給定的字串是‘abcdef’,另一個字串是‘defabc’,旋轉次數為3。

輸出:Yes

解釋:我們可以將字串向左旋轉1位,得到:‘bcdefa’

第二次旋轉字串為‘cdefab’,第三次旋轉字串為‘defabc’。

注意:這裡沒有指定旋轉方向(左旋或右旋)。在本文中,我們將分別實現向左和向右旋轉字串的程式碼。我們還將使用反轉演算法來查詢結果。

左旋方法

我們將實現反轉演算法,將第一個字串的元素旋轉給定次數,然後檢查旋轉後的字串與第二個字串是否相同。如果相同,則返回true,否則返回false。

示例

// function to reverse the given string
function left_rotation(str,k){
   var len = str.length
   k = k % len
   return str.substring(k) + str.substring(0,k);
}
// 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 the length of both the given strings is not equal then it is impossible
   if(len1 != len2){
      return false;
   }
   // rotating the first string
   string1 = left_rotation(string1,number);
   if(string1 == string2){
      return true;
   }
   return false;
}
// defining the string
var string1 = "abcdef";
var string2 = "defabc";
var number = 3;
if(check(string1,string2,number)){
   console.log("Yes, we can convert the string '" + string1 + "' to string '" + string2 + "' in the given " + number + " number of rotations ");
} else {
   console.log("No, we cannot convert the string '" + string1 + "' to string '" + string2 + "' in the given " + number + " number of rotations ");
}

輸出

Yes, we can convert string 'abcdef' to string 'defabc' in the given 3 number of rotations 

時間和空間複雜度

上述程式碼的時間複雜度為O(N),是線性的,因為我們只遍歷字串兩次。一次旋轉字串,另一次與給定字串匹配。

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

右旋方法

在右旋中,我們將執行與先前方法完全相同的操作,只是方向相反,使用子字串方法獲取子字串,並以獲得右旋的方式附加。

示例

// function to reverse the given string
function right_rotation(str,k){
   var len = str.length
   k = k % len
   return str.substring(len-k) + str.substring(0,len-k);
}
// 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 the length of both the given strings is not equal then it’s impossible
   if(len1 != len2){
      return false;
   }
   // rotating the first string
   string1 = right_rotation(string1,number);
   if(string1 == string2){
      return true;
   }
   return false;
}
// defining the string
var string1 = "abcdef";
var string2 = "defabc";
var number = 3;
if(check(string1,string2,number)){
   console.log("Yes, we can convert the string '" + string1 + "' to the string '" + string2 + "' in the given " + number + " number of rotations ");
}
else{
   console.log("No, we cannot convert the string '" + string1 + "' to the string '" + string2 + "' in the given " + number + " number of rotations ");
}

輸出

Yes, we can convert the string 'abcdef' to the string 'defabc' in the given 3 number of rotations 

時間和空間複雜度

上述程式碼的時間複雜度為O(N),是線性的,因為我們只遍歷字串兩次。一次旋轉字串,另一次與給定字串匹配。

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

結論

在本教程中,我們實現了JavaScript程式碼,將給定字串向左和向右旋轉給定次數,以與另一個給定字串匹配。如果旋轉後給定字串等於另一個字串,則列印yes,否則列印no。我們以O(N)時間和O(1)空間實現了程式碼。

更新於:2023年4月13日

124 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告