using System.Collections.Generic;
public static void Main()
var target = new List<string>(){"2612"};
var found = new List<string>(){"261", "2612", "abc2612def", "abc2012def"};
foreach (var targetText in target)
foreach (var foundText in found)
match = SearchString(targetText, foundText, distanceInc);
if(distanceInc >= foundText.Length)
Console.WriteLine(distanceInc);
foreach (var targetText in target)
foreach (var foundText in found)
match = SearchString(foundText, targetText, distanceInc);
if(distanceInc >= targetText.Length)
Console.WriteLine(distanceInc);
public static int SearchString(string text, string pattern, int k)
int[] patternMask = new int[128];
if (string.IsNullOrEmpty(pattern)) return 0;
R = new int[(k + 1) * sizeof(int)];
for (i = 0; i <= 127; ++i)
patternMask[pattern[i]] &= ~(1 << i);
for (i = 0; i < text.Length; ++i)
R[0] |= patternMask[text[i]];
R[d] = (oldRd1 & (R[d] | patternMask[text[i]])) << 1;
if (0 == (R[k] & (1 << m)))