JavaScript 字符串左旋转和右旋转程序
给定一个字符串和一个整数值。整数表示我们必须将字符串向左和向右旋转多少次。在左旋转中,将字符串字符从前缀侧逆时针移动,并将其添加到后缀侧。类似地,在右旋转中,将给定字符串的字符顺时针移动,并从后缀中选取字符,并将其添加到字符串的前缀。
在本文中,我们将实现用于给定字符串的左旋转和右旋转的JavaScript程序。给定字符串的长度和字符串中字符的频率不会改变,只会改变当前字符串的排列。
示例场景 1
Input 1: String str = "apple"; Input 2: int k = 4; Output: left_rotation = "eappl";
第 1 次旋转:pplea,第 2 次旋转:pleap,第 3 次旋转:leapp,第 4 次旋转:eappl
示例场景 2
Input 1: String str = "apple"; Input 2: int k = 4; Output: right_rotation = "pplea";
第 1 次旋转:eappl,第 2 次旋转:leapp,第 3 次旋转:pleap,第 4 次旋转:pplea
从以上示例场景可以得出结论,通过将字符串向左或向右旋转其长度大小的次数最终将带来与初始字符串相同的字符串。因此,如果给定的旋转次数超过字符串的长度,则我们可以对其取模,它将给出完全相同的答案。
JavaScript 中的字符串左旋转和右旋转
让我们看看我们将在 JavaScript 程序中遵循的步骤来解决给定的问题 -
首先,我们将获取给定字符串并将其存储在一个变量中,并将所需的旋转次数存储在另一个变量中。我们也可以打印它们以获得更好的比较。
我们将创建两个函数,第一个用于字符串的左旋转,第二个用于字符串的右旋转。
对于每个函数,我们将传递给定的字符串和旋转次数变量作为参数。
在左旋转函数中,我们将获取包含最后 k 个元素的两个子字符串,第二个包含其余元素,并交换它们的位置。
在右旋转函数中,我们将获取包含前 k 个元素的两个子字符串,第二个包含其余元素,并交换它们的位置。
示例
以下是执行字符串的左旋转和右旋转的 JavaScript 程序 -
// function for left rotation function left_rotation(str, k) { // Adjust k to be within the length of the string k = k % str.length; var new_str = str.substr(k) + str.substring(0, k); console.log("String after kth left rotation is: " + new_str); } // function for right rotation function right_rotation(str, k) { // Adjust k to be within the length of the string k = k % str.length; var new_str = str.substr(str.length - k) + str.substring(0, str.length - k); console.log("String after kth right rotation is: " + new_str); } // given string var str = "apple"; var k = 6; // printing the given string console.log("The given string is: " + str); // getting left rotation left_rotation(str, k); // getting right rotation right_rotation(str, k);
以下是上述代码的输出 -
The given string is: apple String after kth left rotation is: pplea String after kth right rotation is: eappl
时间和空间复杂度
上述代码的时间复杂度为O(N),其中 N 是给定字符串的大小。在上述代码中,我们只是获取字符串字符并以不同的方式将其拆分和添加,这使得时间复杂度为线性。
上述代码的空间复杂度为O(1),因为我们没有使用任何额外的空间,只是将一个字符串存储到另一个字符串中,该空间用于答案,因此没有使用额外的空间。
结论
在本文中,我们实现了用于给定字符串的左旋转和右旋转的 JavaScript 程序。字符串的左旋转表示给定数量的字符的逆时针移动,字符串的右旋转表示给定数量的字符的顺时针移动。我们使用了子字符串的概念,通过该概念,我们正在拆分字符串并在另一侧添加后缀或前缀。给定程序的时间复杂度为 O(N),空间复杂度为 O(1)。