JavaScript 用于检查一个字符串是否可以通过旋转另一个字符串2个位置而获得
我们给出了两个字符串s1和s2,我们需要检查是否可能通过将一个字符串旋转2个位置来获得另一个字符串。我们可以将字符串顺时针或逆时针旋转。在这里,如果字符串在旋转2个位置后与原字符串匹配,则打印“是”,否则打印“否”。
示例
让我们假设我们已经给出了两个字符串s1和s2,如下所示:
示例1:
Input: s1 = “TutorialsPoint”, s2 = “PointTutorials”
Output: No
解释:这里s2是s1字符串逆时针旋转9个位置和顺时针旋转5个位置的结果。其中没有2个位置的旋转,所以输出为’No’。
示例2:
Input: s1 = “TutorialsPoint”, s2 = “torialsPointTu”
Output: Yes
解释:这里s2是将字符串s1逆时针旋转2个位置,以及顺时针旋转s1 12个位置。其中一个是2个位置的旋转,因此输出为’是’。
子字符串方法
我们已经看过上面的示例,现在让我们看一下实现代码的步骤−
- 首先,我们将实现一个函数,该函数将以字符串作为参数,并返回字符串左移2个索引的结果。
-
在这个函数中,我们首先使用子字符串方法拆分字符串,然后将其拼接起来。
-
类似于第一个方法,我们将定义另一个函数来将字符串向右移2个索引并返回它。
-
我们的主要工作将在一个新函数下定义,我们将把两个字符串作为参数传递进来,然后比较它们的长度是否相同,如果不同,则返回false。
-
我们将调用左移和右移函数,并获得它们的结果。然后,我们将匹配它们,如果任何一个与第二个字符串匹配,我们将打印yes,否则打印no。
示例
在下面的示例中,我们检查一个字符串是否可以通过将另一个字符串旋转2个位置而得到。下面是输入和预期输出。
输入:str1 = TutorialsPoint str2 = torialsPointTu
预期输出:Yes
// 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程序,用于检查两个给定的字符串是否可以通过将其中一个字符串在顺时针或逆时针方向旋转来相等。我们使用了substring方法来拆分字符串,然后将其合并回来进行两次旋转。代码的时间复杂度为O(N),其中我们没有使用任何额外的空间。