在 Python 中,编写一个程序,在将给定数量的字符移位后获取最终字符串

pythonserver side programmingprogramming更新于 2026/1/11 10:52:17

假设我们有一个小写字符串 s 和另一个整数列表,称为 shifts,其长度与 s 的长度相同。这里 shifts[i] 中的每个元素表示将 s 的前 i + 1 个字母移位 shifts[i] 个位置。如果移位越过 'z',它将绕回到 'a'。我们必须在将 s 移位后找到结果字符串。

因此,如果输入为 s = "tomato" shifts = [2, 5, 2, 3, 7, 4],则输出将为 "qjcoes",因此,在将第一个字符移位 2 位后,它将为 't&39;到'v',所以字符串为"vomato",之后是前两个字符 5 个位置。字符串现在将是"atmato"这样,最终字符串将为"qjcoes"。

为了解决这个问题,我们将遵循以下步骤 −

  • start := "a"的 ASCII
  • res := s 中每个 i 的 (i - start) ASCII 列表
  • 对于 shifts - 2 到 0 范围内的 i,减少 1,执行
    • shifts[i] := shifts[i] + shifts[i + 1]
  • 对于 0 到 s - 1 范围内的 i,执行
    • c :=(res[i] + shifts[i]) mod 26
    • res[i] := ASCII 字符 (c + start)
  • 将字母 res 连接成一个字符串并返回

示例

让我们看看下面的实现以便更好地理解 −

def solve(s, shifts):
   start = ord("a")
   res = [ord(i) - start for i in s]

   for i in range(len(shifts) - 2, -1, -1):
      shifts[i] += shifts[i + 1]

   for i in range(len(s)):
      c = (res[i] + shifts[i]) % 26
      res[i] = chr(c + start)

   return "".join(res)

s = "tomato"
shifts = [2, 5, 2, 3, 7, 4]
print(solve(s, shifts))

输入

[2, 1], 3, 2

输出

qjcoes

相关文章


有用资源