Contare le sottostringhe di una stringa composta da un alfabeto ternario che non contengono e in .
Usiamo una tabella unidimensionale (array) lunga . Mettiamo in le stringhe buone lunghe .
Le stringhe buone lunghe possono rientrare in tre casi possibili:
- quelle che finiscono con :
- la sottostringa fino al penultimo carattere può terminare in , quindi va bene una qualsiasi delle stringhe contate da .
- quelle che finiscono con :
- la sottostringa fino al penultimo carattere può terminare in , quindi va bene una qualsiasi delle stringhe contate da .
- quelle che finiscono con :
- la sottostringa fino al penultimo carattere può terminare solo con , quindi qualsiasi stringa della forma
stringa di quelle contate da T[i-2] + "0", quindi esistono stringhe valide in questo caso.
- la sottostringa fino al penultimo carattere può terminare solo con , quindi qualsiasi stringa della forma
Riassumendo, .
I casi base sono .
def conta(n):
T = [0] * (n+1)
T[0], T[1] = 1, 3
for i in range(2, n+1):
T[i] = 2*T[i-1] + T[i-2]
return T[-1]
Contare le sottostringhe di una stringa composta da un alfabeto ternario che non contengono , , .
Le stringhe buone lunghe possono terminare con i caratteri:
[ultimo carattere]
0
[penultimo carattere]
0
[terzultimo carattere]
0 (invalide)
1 (valide, T[i-3] stringhe)
2 (valide, T[i-3] stringhe)
1
0 (invalide)
1 (valide, T[i-3] stringhe)
2 (valide, T[i-3] stringhe)
2
0 (invalide)
1 (valide, T[i-3] stringhe)
2 (valide, T[i-3] stringhe)
1 (valide, T[i-1] stringhe)
2 (valide, T[i-1] stringhe)