以下应该可以解决问题:
public static IEnumerable<string> GetCombinations(
string s,
Dictionary<char, IEnumerable<char>> substitutions)
{
IEnumerable<string> GetCombinations(
string original,
string current,
int index)
{
if (index == original.Length)
{
yield return current;
}
else
{
if (substitutions.TryGetValue(
original[index],
out var chars))
{
foreach (var c in chars)
{
foreach (var combination in
GetCombinations(original,
current + c,
index + 1))
{
yield return combination;
}
}
}
}
}
if (string.IsNullOrEmpty(s))
return Enumerable.Repeat(s, 1);
var lowerCased = s.ToLower();
return GetCombinations(lowerCased,
string.Empty,
0);
}
而你之前会称它为构建你的替换字典:
var substitutions = new Dictionary<char, IEnumerable<char>>();
substitutions.Add('s', new[] { 's', 'S', '5' });
substitutions.Add('o', new[] { 'o', 'O', '0' });
substitutions.Add('p', new[] { 'p','P' });
substitutions.Add('u', new[] { 'u', 'U' });
substitutions.Add('r', new[] { 'r', 'R' });
substitutions.Add('t', new[] { 't', 'T' });
Console.WriteLine(string.Join(
Environment.NewLine,
GetCombinations("support", substitutions)));