美文网首页
848. 字母移位(Python)

848. 字母移位(Python)

作者: 玖月晴 | 来源:发表于2021-02-21 14:29 被阅读0次

难度:★★☆☆☆
类型:数组
方法:抓重点

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

题目

有一个由小写字母组成的字符串 S,和一个整数数组 shifts。

我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的, 'z' 将会变成 'a')。

例如·,shift('a') = 'b', shift('t') = 'u',, 以及 shift('z') = 'a'。

对于每个 shifts[i] = x , 我们会将 S 中的前 i+1 个字母移位 x 次。

返回将所有这些移位都应用到 S 后最终得到的字符串。

示例:

输入:S = "abc", shifts = [3,5,9]
输出:"rpl"
解释:
我们以 "abc" 开始。
将 S 中的第 1 个字母移位 3 次后,我们得到 "dbc"。
再将 S 中的前 2 个字母移位 5 次后,我们得到 "igc"。
最后将 S 中的这 3 个字母移位 9 次后,我们得到答案 "rpl"。
提示:

1 <= S.length = shifts.length <= 20000
0 <= shifts[i] <= 10 ^ 9

解答

这道题很简单,重点在于提炼核心算法避免重复超时。

我们定义一个函数get_shift_result,用于计算一个字母c位移s次后可以得到的字母,这个函数中要注意的是“a”的ASCII码是从9开始,另外要灵活运用取余来解决旋转问题。

再定义一个函数get_shifts,用于获取最后的偏移量列表shifts,例如题目中的shifts为[1,2,3]实际上意味着对应位置处的字母总位移次数为[6,5,3]次,这里要巧妙使用逆序进行处理。

最后,我们把每个字母按顺序拆分,处理,合并即可。

class Solution:
    def shiftingLetters(self, S, shifts):

        def get_shift_result(c, s):
            return chr(97 + ((ord(c) + s % 26) - 97) % 26)

        def get_shifts(shifts):
            cur_s = 0
            new_shifts = []
            for s in reversed(shifts):
                cur_s += s
                new_shifts.append(cur_s)
            return reversed(new_shifts)

        return "".join(get_shift_result(c, s) for c, s in zip(S, get_shifts(shifts)))

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

相关文章

  • 848. 字母移位(Python)

    难度:★★☆☆☆类型:数组方法:抓重点 力扣链接请移步本题传送门[https://leetcode-cn.com/...

  • fromCharCode疑惑

    移位密码也就是密码中的字母会按照指定的数量来做移位。一个常见的案例就是ROT13密码,字母会移位13个位置。由'A...

  • 位移密码算法挑战

    著名的凯撒密码Caesar cipher,又叫移位密码。 移位密码也就是密码中的字母会按照指定的数量来做移位。 一...

  • Caesars Cipher(凯撒密码)

    Caesar cipher,又叫移位密码。 移位密码也就是密码中的字母会按照指定的数量来做移位。 一个常见的案例就...

  • js实现密码加密(1.只对字母移位16位加密2.base64加密

    字母右移位16位加密 字母移位解密 Base64加解密 下文是存放在util文件夹下,将Base64加密封装成通用...

  • 移位法和替代法(day33)

    移位法替代法听上去比较简单 移位法就是把字母,数字向后或向前,或倒着写。 替代法就是一个字母,数字用其他字符代替,...

  • 频率分析法

    以前讲过凯撒密码是一种移位加密,密钥就是平移的字母的个数。由于字母表只有26个字母,因此加密用的密钥只有0到2...

  • LeetCode 848 字母移位 Shifting Lette

  • 密码学(二)之代换密码

    (一)代换密码(替换密码)** 上一讲中,我们讲移位密码其实是将字母表中的字母一一对应到各数字,然后通过数字平移来...

  • 常见位运算及技巧

    移位运算 移位运算包含逻辑移位(logical shif) 和 算术移位(arithmetic shift)。 逻...

网友评论

      本文标题:848. 字母移位(Python)

      本文链接:https://www.haomeiwen.com/subject/almstltx.html