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
广告