Alphacode

【原题链接】

【题意说明】

字符编码问题:把字母A→1、B →2……Z→26进行编码,现在有一串编码,求有多少种可能的串可以得到这个编码?

【问题分析】

 从最后一个字符向前推,显然对于只有一个数字的编码,只有一种串数为1,对于0个编码,对应为空串,数值也为1。

对于第i个位置:

(1)若它为0,则不处理,直接处理前面一个;

(2)1° 它本身这个数对应一个字母,则此种情况它的串数对应于第i+1位置上的串数;

       2° 若它能与后面一个数组成的数,对应一个字母,则此种情况它的串数对应于第i+2位置上的串数。

所以,可以看出,当前位置只与后面两个位置有关,这样我们就可以用两个数来保存所需要的数即可。

递推式为:a=b+g(i,i+1)*c。这里的g(i,i+1)表示第i位置与i+1位置能否组成合法的数,若能则g(i,i+1)的值为1,否则为0。

这里需要注意的是:当第j位0时,则它一定与第j-1构成一个数,并且要把第j、j-1看成一个数来处理,即10或20。

如1101这个数,它只有一种方案:AJA,不能把第一个1与第二个1组合成一起!

事实上在处理时,我们可以用一个变量y来保存前一个位置的值,若检查到y为0,则把y的值设为:当前的值*10,并且不处理当前位置,直接去处理前面的位置。

 

原文地址:https://www.cnblogs.com/ahmasoi/p/2764509.html