Python程序:根据给定位置移动字符后得到最终字符串


假设我们有一个小写字符串s和另一个整数列表shifts,其长度与s的长度相同。shifts[i]中的每个元素表示将s的前i+1个字母移动shifts[i]个位置。如果移动超过'z',则会环绕到'a'。我们必须找到应用shifts到s后的结果字符串。

因此,如果输入类似于s = "tomato" shifts = [2, 5, 2, 3, 7, 4],则输出将为"qjcoes",因此,在将第一个字符移动2个位置后,它将从't'变为'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

更新于:2021年10月16日

597 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告