每日一练笔记|编码(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)

每日一练笔记|编码(Python)_第1张图片

你可能感兴趣的:(每日一练,python,开发语言)