每日一练笔记|编码(Python)

题目描述

编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。 字母表中共有26个字母{a,b,…,z},这些特殊的单词长度不超过6且字母按升序排列。把所有这样的长度相同的单词放在一起,按字典顺序排列,一个单词的编码就对应着它在整个序列中的位置。 你的任务就是对于所给的单词,求出它的编码。

输入描述:

仅一行,被编码的单词。

输出描述:

仅一行,对应的编码。如果单词不在序列中,输出0。

示例

示例1
输入
ab
输出
27

参考

链接: 【题解】【算法】- 洛谷 - P1246 编码(递推)

代码:
class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, word):

        num_list = [ [0] * 10 for i in range(30)]
        num = 0
        ans = 0
        # 长度大于6,返回0
        if len(word)>6:
            return 0
        # 不是字母表中的字母,返回0
        for i in word:
            if i<'a' or i>'z':
                return 0
        # 不是升序,返回0
        for i in range(1,len(word)):
            if word[i-1]>=word[i]:
                return 0
        # 初始化,长度为1的字符串的数量就是1
        for i in range(1,27):
            num_list[i][1] = 1
        # 打表
        # num_list[i][j] = num_list[i+1][j−1] + num_list[i+1][j]
        for j in range(2,7):
            for i in range(27-j,0,-1):
                num_list[i][j] = num_list[i+1][j-1] + num_list[i+1][j]
        # 计算
        for k in range(len(word)-1,-1,-1):
            num += 1
            for i in range(1,ord(word[k])-ord('a')+1+1):
                ans += num_list[i][num]
        return ans

if __name__ == "__main__":

    word = input().strip()
    
    sol = Solution()
    result = sol.solution(word)

    print(result)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值