""" 消息解码 一条包含字母A-Z的消息通过以下映射进行了编码: 'A’->'1' 'B'->'2' .... ’Z' -> '26' 解码消息,所有数字必须基于上述映射规则,反向映射回字母(可能有多种组合)。 例如,'26'可以映射为:"BF'或者’Z'。 给定一个只含数字的非空字符串,统计解码组合的总数。 """ def decoding(s): """ 解码函数,根据给定的数字字符串s解码出对应的字母字符串长度。 解码规则是基于字母表,其中'1'对应'a','2'对应'b',依此类推,'26'对应'z'。 如果一个数字序列可以被解码成一个字母,则按照解码后的字母长度累加。 参数: s (str): 待解码的数字字符串。 返回: int: 解码后的字母字符串的长度。 """ # 初始化长度变量 length = len(s) # 初始化三个变量,用于计算解码后的字符串长度 x = 0 # 昨天的解码长度 y = 1 # 今天的解码长度 z = 0 # 明天的解码长度 # 遍历字符串,计算解码长度 for i in range(1, length + 1): # 重置明天的解码长度 z = 0 # 如果当前字符不是'0',则可以解码成一个字母,长度加1 if s[i - 1] != "0": z += y # 如果当前字符和前一个字符组成的数字在1到26之间(包含两端),则可以解码成两个字母,长度加1 if i > 1 and s[i - 2] != "0" and int(s[i - 2:i]) <= 26: z += x # 更新昨天和今天的解码长度 x = y y = z # 返回最终的解码长度 return z if __name__ == '__main__': s = "1212" print(decoding(s))
评论前必须登录!
注册