Создание растрового изображения (массив bool).
Строка перемещения s2, переключение каждого бита, соответствующего символу.
Строка перемещения s1, пропуск символа, если соответствующий бит равен true.
Очевидно, измените длину, если вы хотите разрешить больше символов (в приведенном ниже примере требуется ToLower () / ToUpper (), поскольку он использует 26).
Пример грубого подтверждения концепции на C # (готово)вставить в LINQPad):
void Main()
{
// Mapping the alpha lower case characters to start at zero
int magicAsciiAdjust = -96;
string s1 = "asdaswerwe"; // Assumes no non-alpha
string s2 = "asdacbBe"; // Assumes no non-alpha
string output = String.Empty;
bool[] mask = new bool[26];
foreach (char c in s2.ToLower())
{
mask[((int)c) + magicAsciiAdjust] = true;
}
foreach(char c in s1.ToLower())
{
if (!mask[((int)c) + magicAsciiAdjust])
output += c;
}
output.Dump();
}
Вы можете поддерживать ASCII, сделав маску длиной 128.(и удаление вызовов ToLower ()) и т. д.