JavaScript 程序检查字符串是否可以通过旋转另一个字符串 2 位得到


我们给出了两个字符串 s1 和 s2,我们必须检查是否可以通过旋转另一个字符串 2 位来获得一个字符串。我们可以沿逆时针或顺时针方向旋转字符串。在这里,如果两个字符串在字符串旋转 2 位后匹配,则必须打印“是”,否则,必须打印“否”。

示例

让我们假设我们给出了两个字符串 s1 和 s2 作为

示例 1

Input: s1 = “TutorialsPoint”, s2 = “PointTutorials”
Output: No

解释:这里 s2 是字符串 s1 逆时针旋转 9 位的结果,也是 s1 顺时针旋转 5 位的结果。两者都不是 2 位旋转,因此输出为“否”。

示例 2

Input: s1 = “TutorialsPoint”, s2 = “torialsPointTu”
Output: Yes

解释:这里 s2 是字符串 s1 逆时针旋转 2 位的结果,也是 s1 顺时针旋转 12 位的结果。其中一个是 2 位旋转,因此输出为“是”。

子字符串方法

我们已经看到了上面的例子,现在让我们看看实现代码的步骤 -

  • 首先,我们将实现一个函数,该函数将字符串作为参数,并返回字符串向左旋转 2 个索引的结果。

  • 在这个函数中,首先我们将使用子字符串方法分割字符串,然后将其重新连接。

  • 与第一种方法类似,我们将定义另一个函数,通过分割将字符串向右旋转 2 个索引并返回。

  • 我们的主要工作将在一个新函数中定义,我们将把这两个字符串作为参数,然后比较它们的长度是否相同,如果不相同则返回 false。

  • 我们将调用左旋转和右旋转函数,并将它们都获取。之后我们将匹配它们,如果其中任何一个与第二个字符串匹配,我们将打印是,否则打印否。

示例

在下面的示例中,我们检查字符串是否可以通过旋转另一个字符串 2 位得到。以下是输入和预期输出。

输入:str1 = TutorialsPoint str2 = torialsPointTu

预期输出:是

// function to rotate the string in the left direction
function left_rotate(str){

   // splitting the string and then again joining back
   str = str.substr(2) + str.substr(0,2);
   return str;
}

// function to rotate the string in the right direction
function right_rotate(str){
   // getting the length of the string
   var len = str.length
   // splitting the string and then again joining back
   str = str.substr(len-2) + str.substr(0,len-2)
   return str;
}

// function to check if one string is equal to another after two rotations
function check(str1, str2){

   // checking the size of both strings
   if(str1.length != str2.length){
      return false;
   }
   
   // getting the left rotation of given string
   var l_str = left_rotate(str1);
   
   // getting the right rotation of given string
   var r_str = right_rotate(str1);
   if(r_str == str2 || l_str == str2){
      return true;
   } else {
      return false;
   }
}

// defining the strings
var str1 = "TutorialsPoint"
var str2 = "torialsPointTu"
console.log("The given strings are " + str1 + " and " + str2);

// calling the function
if(check(str1,str2)){
   console.log("Yes, we can obtain the second string from the given string after two rotations");
}
else{
   console.log("No, we cannot obtain the second string from the given string after two rotations");
}

输出

The given strings are TutorialsPoint and torialsPointTu
Yes, we can obtain the second string from the given string after two rotations

时间复杂度和空间复杂度

上面代码的时间复杂度为 O(N),其中 N 是给定字符串的大小。我们已经分割了给定字符串两次,并且我们还比较了给定字符串,使得时间复杂度为 O(N)。

上面代码的空间复杂度为 O(1),因为我们在这里没有使用任何额外的空间。

结论

在本教程中,我们实现了一个 JavaScript 程序来检查两个给定的字符串是否可以通过沿逆时针或顺时针方向旋转其中一个字符串而变得相等。我们使用子字符串方法分割字符串,然后将其重新连接以进行两次旋转。代码的时间复杂度为 O(N),我们没有使用任何额外的空间。

更新于: 2023年4月13日

177 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告