Friendly Note un po' troppa memoria

Ciao a tutti,
ho di recente provato a risolvere Friendly Note utilizzando un suffix trie, purtroppo esso occupa O(|S|^2) di spazio totalizzando un triste 50/100. Mi chiedevo se esistesse qualche tecnica oscura per farlo stare nei limiti del problema.
Se qualcuno fosse interessato, lascio il mio codice:

struct node{
	map<char,node*> children;
};

int dispute(string N, string S)
{
	node* root = new node;
	node* curr;
	
	for(int i=S.size(); i--;)
	{
		curr = root;
		for(int j=i; j<S.size(); j++)
		{
			if(curr->children.find(S[j]) == curr->children.end())
				curr->children[S[j]] = new node;
			curr = curr->children[S[j]];
		}
	}
	
	int seq = 1;
	curr = root;
	
	for(int i=0; i<N.size();)
	{
		if(curr->children.find(N[i]) != curr->children.end())
			curr = curr->children[N[i++]];
		else
		{
			curr = root;
			seq++;
		}
	}
	
	return seq;
}

P.S.: tornerĂ  mai MathJax?

non devi usare un suffix trie.

Ok sono molto triste, qualche aiutino?

1 Mi Piace

come mi è stato suggerito da erolm
suffix array

Neanche suffix array

Te cosa hai usato?
Erolm ha salvato gli indici con un suffix array ed ha funzionato

Ho usato un semplice suffix tree

E quale sarebbe la differenza? :sweat_smile:

1 Mi Piace

Dopo innumerevoli tentativi sono finalmente riuscito a ottenere 100/100 utilizzando un suffix tree, grazie comunque per l’aiuto.

1 Mi Piace

Tra Suffix Trie e Suffix Tree nessuna, probabilmente @lukecavabarrett intendeva che serve una versione “compressa” dell’albero.

Suffix tree e suffix trie sono differenti
Il suffix tree è la compressione del suffix trie