如何在 JavaScript 中将给定字符串中的每个字母在字母表中向下移动 N 个位置?
在给定的问题陈述中,我们的目标是借助 Javascript 功能将给定字符串中的每个字母在字母表中向下移动 N 个位置。因此,我们将使用一些基本的 Javascript 方法来完成给定的任务。
理解问题
手头的问题是使用 Javascript 将给定字符串的字符在字母表中向下移动 N 个位置。这个问题的目的是我们需要将字符串作为输入,并且必须通过将每个字母在字母表中向下移动 N 个位置来更新给定的字符串。例如,如果字母 A 向下移动 2 个位置,它将变成 C;如果 Y 向下移动 2 个位置,它将变成 A。因此,最终我们必须显示移动所有给定字符串字符后结果。
给定问题的逻辑
为了解决这个问题,我们将创建一个函数,该函数将接受两个参数作为输入:第一个是字符串 str,第二个是每个字母移动的位置数 N。在这个函数中,我们将定义字母表作为一个字符串,其中包含所有小写字母。然后,我们将使用正则表达式来匹配字符串中所有的小写字母和大写字母。
现在,对于每个匹配的字母,我们将将其转换为小写,然后在字母表字符串中找到其当前索引。之后,我们将通过将 N 加到当前索引来计算新索引,并使用模运算符 % 检查它是否围绕字母表循环。之后,我们将从字母表字符串的新索引处检索移动的字符。并且,如果原始字符串中存在大写字母,我们也将进行转换。最后显示带有移动字母的更新后的字符串。
算法
步骤 1:因为我们必须将给定的输入字符串在字母表中向下移动 n 个位置,所以为了执行此任务,我们将创建一个函数并将其命名为 shiftString()。此函数接受两个参数:第一个是字符串 str,第二个是数字 N。N 表示我们必须将每个字符向下移动 N 个位置。
步骤 2:在函数内部,我们将声明所有字母的字符串,并将其命名为 alphabet。此字符串将用于检查输入字符串中存在的每个字母的索引,以及将每个字母向下移动 N 个位置。
步骤 3:声明字母表字符串后,我们将使用正则表达式来匹配字符串中存在的所有小写字母和大写字母。如果字符串中存在任何大写字母,则将其转换为小写。
步骤 4:然后检查字符串中每个字母的索引。
步骤 5:因为我们必须将每个字母向下移动 N 个位置,所以在此步骤中,我们将每个字母向下移动 N 个位置,并使其围绕字母表循环。
步骤 6:现在,移动的字符将存储在 shiftedChar 变量中。
步骤 7:在倒数第二步中,我们还将检查是否存在任何大写字母,因此在大写字母的位置,我们将再次将其转换为 shiftedChar 字符串中的大写字母。
步骤 8:最后,我们将返回 shiftedStr 作为结果。
示例
//Function to shirt the string n places down function shiftString(str, N) { const alphabet = 'abcdefghijklmnopqrstuvwxyz'; const shiftedStr = str.replace(/[a-z]/gi, (match) => { const lowercase = match.toLowerCase(); const currentIndex = alphabet.indexOf(lowercase); const newIndex = (currentIndex + N) % 26; // Wrapping around the alphabet const shiftedChar = alphabet[newIndex]; return (lowercase === match) ? shiftedChar : shiftedChar.toUpperCase(); }); return shiftedStr; } const inputString = 'Hello, Tutorials Point!'; const shiftedString = shiftString(inputString, 3); console.log(shiftedString);
输出
Khoor, Wxwruldov Srlqw!
复杂度
将给定字符串中的每个字母在字母表中向下移动 N 个位置的给定问题的时效复杂度为 O(n),其中 n 是输入字符串的大小。因为代码遍历给定字符串中的字母并执行操作以将每个字母向下移动到字母表中。代码使用内存来存储字母表字符串,该字符串的固定长度为 26 个字符。因此,空间复杂度为 O(1),因为它不依赖于输入字符串的大小。
结论
我们已经实现的代码有效地解决了将每个字符在给定字符串中向下移动 N 个位置的给定问题。该代码具有线性时间复杂度,这确保了代码能够处理任何长度的输入字符串。并且代码还保持恒定的空间复杂度。