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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP