编码工作常被运用于密文或压缩传输。这里我们用一种最简单的编码方式进行编码:把一些有规律的单词编成数字。 字母表中共有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)