在 JavaScript 中循环左右移动字符串
问题陈述的主要目标是在 Javascript 中对字符串执行循环移位。循环移位可以是左移或右移。并在 Javascript 中实现此解决方案。
理解问题
当前的问题是借助 Javascript 功能循环左右移动字符串。循环移位意味着我们必须以循环方式移动给定字符串的字符,其中要移位的字符超出字符串的边界,并且应该重新出现在另一端。
给定问题的逻辑
为了解决这个问题,我们将实现两个函数。第一个函数将字符移到左侧,第二个函数将字符移到右侧。这两个函数都将字符串和要移动的位置数作为输入。
第一个函数将通过对给定位置与字符串长度取模来计算有效位置数。然后我们将使用子字符串方法提取字符串的部分,并将字符串的部分从开头到计算的位置连接起来。
第二个函数也将执行与第一个函数相同的步骤,但在这个函数中,我们将以相反的顺序提取子字符串。所以我们将借助模数计算有效位置数。最后将该部分与字符串从开头连接起来,直到字符串长度和计算的位置之间的差值。
算法
步骤 1:正如我们上面所讨论的,我们将分别创建两个函数。因此,在这一步中,我们将定义第一个函数并将其命名为 shiftLeft,该函数有两个参数,第一个是字符串,第二个是位置。字符串是我们要执行此任务的输入字符串,位置是有效位置数。
步骤 2:定义函数后,我们将通过对给定位置和给定字符串的长度取模来计算位置数。
步骤 3:因此,在此阶段,我们将使用子字符串方法提取从计算位置开始到字符串末尾的字符串部分。并将其与从起始位置到计算位置的字符串部分连接起来。
步骤 4:定义第二个函数以将字符串的字符向右移动。与上述函数类似,此函数也采用两个参数字符串和位置。
步骤 5:由于此函数也遵循类似的过程,但在此函数中,我们将以相反的顺序提取字符串。因此,我们将借助模数计算有效位置数。
步骤 6:然后,我们将从字符串长度和计算位置之间的差异开始提取字符串的部分,直到字符串的末尾。
步骤 7:之后,我们将从开头到字符串长度和计算位置之间的差异连接字符串的部分。
示例
//执行循环左移的函数
function shiftLeft(str, positions) {
// handle positions larger than string length
positions = positions % str.length;
return str.substring(positions) + str.substring(0, positions);
}
// 执行循环右移的函数
function shiftRight(str, positions) {
// 处理大于字符串长度的位置
positions = positions % str.length;
return str.substring(str.length - positions) +
str.substring(0, str.length - positions);
}
const originalStr = 'Hello Tutorials Point';
const leftShifted = shiftLeft(originalStr, 3);
const rightShifted = shiftRight(originalStr, 2);
console.log(leftShifted);
console.log(rightShifted);
输出
lo Tutorials PointHel ntHello Tutorials Poi
复杂性
我们创建了两个函数来执行以循环方式左右移动字符的任务。这两个函数的时间复杂度均为 O(n),其中 n 是给定输入字符串的大小。这两个函数所消耗的空间也是 O(n)。因为我们创建了一个长度为 n 的新字符串来连接子字符串,这需要额外的空间。
结论
我们实现的代码成功地在 Javascript 中以循环方式左右移动字符串的字符。时间和空间复杂度是线性的,与字符串的输入大小成比例。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

