JavaScript 循环左移和右移字符串
问题陈述的主要目标是在JavaScript中对字符串执行循环移位操作。循环移位可以是左移或右移。并且在JavaScript中实现此解决方案。
理解问题
我们要解决的问题是使用JavaScript功能在字符串上进行循环左移和右移。循环移位意味着我们必须将给定字符串的字符以循环方式移动,其中要移动的字符超出了字符串的边界,并且它们应该在相反的端点重新出现。
解决方案逻辑
为了解决这个问题,我们将实现两个函数。第一个函数将把字符向左移动,第二个函数将把字符向右移动。两个函数都将以字符串和要移动的位置数量作为输入。
第一个函数将通过将给定位置与字符串长度取模来计算有效的位置数量。然后,我们将使用substring方法提取字符串的一部分,并将字符串的起始部分与计算出的位置之间的部分连接起来。
第二个函数的步骤与第一个函数相同,但是在这个函数中,我们将以相反的顺序提取子字符串。因此,我们将使用模运算计算有效的位置数量。最后,将字符串从开头直到字符串长度与计算出的位置之间的差异部分与字符串连接起来。
步骤
步骤1: 如上所述,我们将分别创建两个函数。因此,在此步骤中,我们将定义第一个函数并命名为shiftLeft,此函数接受两个参数,第一个是字符串,第二个是位置。字符串是我们要执行此任务的输入字符串,位置是有效的位置数量。
步骤2: 在定义函数后,我们将通过将给定位置与给定字符串的长度取模来计算位置数量。
步骤3: 因此,在此阶段,我们将使用substring方法提取字符串的一部分,该部分将从计算出的位置开始,直到字符串的末尾。并将其与从开头到计算出的位置的部分连接起来。
步骤4: 定义第二个函数以将字符串的字符向右移动。与上述函数类似,此函数还接受字符串和位置两个参数。
步骤5: 由于此函数也遵循类似的过程,但是在此函数中,我们将以相反的顺序提取字符串。因此,我们将使用模运算来计算有效的位置数量。
步骤6: 然后,我们将提取字符串的一部分,从字符串长度与计算出的位置之间的差异处开始,直到字符串的末尾。
步骤7: 在此之后,我们将把字符串从开头到字符串长度与计算出的位置之间的差异处的部分连接起来。
示例
//Function to do circular shift left
function shiftLeft(str, positions) {
// handle positions larger than string length
positions = positions % str.length;
return str.substring(positions) + str.substring(0, positions);
}
//Function to do circular shift right
function shiftRight(str, positions) {
// handle positions larger than string length
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中将字符串的字符循环左移和循环右移。时间和空间复杂度都是线性的,并且与字符串的输入大小成比例。