diff --git a/LunrCore/TokenSet.cs b/LunrCore/TokenSet.cs index 0a948bd..c54f561 100644 --- a/LunrCore/TokenSet.cs +++ b/LunrCore/TokenSet.cs @@ -101,6 +101,8 @@ public static TokenSet FromFuzzyString( idProvider ??= TokenSetIdProvider.Instance; var root = new TokenSet(idProvider); + var seen = new HashSet<(int nodeId, string frameStr, int editsRemaining)>(); + var stack = new Stack<(TokenSet node, int editsRemaining, string str)>(); stack.Push(( node: root, @@ -111,6 +113,13 @@ public static TokenSet FromFuzzyString( { (TokenSet frameNode, int frameEditsRemaining, string frameStr) = stack.Pop(); + // skip if already processed + var stateKey = (frameNode.Id, frameStr, frameEditsRemaining); + if (!seen.Add(stateKey)) + { + continue; + } + // no edit if (frameStr.Length > 0) {