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.

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)