482. 秘钥格式化(Python)

作者: 玖月晴 | 来源:发表于2019-05-20 09:25 被阅读0次

题目

难度:★★☆☆☆
类型:字符串

给定一个密钥字符串S,只包含字母,数字以及 '-'(破折号)。N 个 '-' 将字符串分成了 N+1 组。给定一个数字 K,重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符,第一个分组至少要包含 1 个字符。两个分组之间用 '-'(破折号)隔开,并且将所有的小写字母转换为大写字母。

给定非空字符串 S 和数字 K,按照上面描述的规则进行格式化。

示例

示例 1:
输入:S = "5F3Z-2e-9-w", K = 4
输出:"5F3Z-2E9W"
解释:字符串 S 被分成了两个部分,每部分 4 个字符;注意,两个额外的破折号需要删掉。

示例 2:
输入:S = "2-5g-3-J", K = 2
输出:"2-5G-3J"
解释:字符串 S 被分成了 3 个部分,按照前面的规则描述,第一部分的字符可以少于给定的数量,其余部分皆为 2 个字符。

提示

S 的长度不超过 12,000,K 为正整数
S 只包含字母数字(a-z,A-Z,0-9)以及破折号'-'
S 非空

解答

观察字符串秘钥的格式化方式,可以看到有以下特点:

  1. 编码完成的字符串与输入字符串中“-”所在的位置和数量无关;

  2. 编码完成的字符串中字母均为大写;

  3. 编码完成的字符串用“-”分割,除了第一项外,其他各项子串的长度均为K,如果字母总长度恰好是K的整数倍,则第一项子串长度与其他子串均相等。

因此,我们在编码过程中的流程是:

  1. 将输入字符串中所有的“-”都去掉,并且将所有小写字母变为大写;

  2. 我们通过定义起始指针和终止指针,两个指针的范围均在0与输入字符串长度之间,这两个指针用来定位输入字符串的某一子串,通过遍历输入字符串获得格式化秘钥用“-”分开的各项子串,装在一个列表中,最后用“-”连接起来:
    (1)起始指针的初始化值为零,终止指针的初始化取决于输入秘钥去“-”后的长度length能否被K整除,如果能,则为K,如果不能,则为length除以K取余,总之,要保证裁剪下来第一个子串后,剩余的部分均能被等长得裁成若干长度为K的子串,将当前子串加入到结果列表中;
    (2)每次裁剪下一个子串后,将起始指针移动到终止指针处,终止指针移动到其后K个字符的位置,保证和上一次迭代裁下的字符串相接;
    (3)当终止指针大于去“-”后的秘钥长度length时,即可跳出循环。

  3. 将结果列表中的所有子串用“-”连接起来。

class Solution:
    def licenseKeyFormatting(self, S, K):
        s_long = S.replace('-', '').upper()         # 去掉字符串中所有“-”,并将所有字符变为大写
        length = len(s_long)                        # 字母长度
        start = 0                                   # 起始位置
        end = K if length % K == 0 else length % K  # 根据情况设置字符串结尾
        res = []                                    # 结果列表
        while end <= length:                        # 当下标合法时
            res.append(s_long[start: end])          # 将当前裁下来的子串放进列表
            start, end = end, end+K                 # 更新起始和结束位置下标
        return '-'.join(res)                        # 将列表中的字符串用“-”连接起来

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

相关文章

  • 482. 秘钥格式化(Python)

    题目 难度:★★☆☆☆类型:字符串 给定一个密钥字符串S,只包含字母,数字以及 '-'(破折号)。N 个 '-' ...

  • Diffie-Hellman秘钥交换

    什么是秘钥交换 秘钥交换也叫秘钥协商,在进行对称加密的时候,怎么进行安全的传送秘钥呢?需要使用秘钥交换。 Diff...

  • linux秘钥登录+普通用户sudo权限

    linux秘钥登录 文件准备 秘钥准备 下载私钥 尝试秘钥连接 同样的操作把root用户的秘钥也保留一份 系统配置...

  • HTTPS的混合加密机制

    HTTPS采用共享秘钥加密和公开秘钥加密两者并用的混合加密机制。 什么是共享秘钥加密? 共享秘钥加密也称对称加密,...

  • 获取秘钥、生成新秘钥

    一: 查看本地秘钥 二:生成新的秘钥

  • Ubuntu免密码登录

    生成秘钥 将秘钥拷贝到server 重新登录即可注意点:如果你有多个账号的秘钥,应该自己新建一个文件目录来存放秘钥...

  • phpweb前台getshell

    影响范围 测试环境: 秘钥加密方式 漏洞检测方法 1、获取秘钥 获取的秘钥:k=01a5b56136714988a...

  • 腾讯云Linux服务器实现秘钥+密码双层验证

    先配置SSH秘钥登录 然后下载秘钥到本地。 然后秘钥登录命令 如果遇到以下提示:WARNING: UNPROTEC...

  • app调起支付宝支付

    1. 用公司的账户申请支付宝账户 2.下载支付宝秘钥生成工具,生成公钥,秘钥(保存好公钥秘钥文件),编写app说明...

  • aws 实例登录

    创建秘钥创建完秘钥时会给你返回一个keyMaterial: 生成秘钥文件注意就是这个信息,将keyMaterial...

网友评论

    本文标题:482. 秘钥格式化(Python)

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