Search code examples
c#algorithmalphabetical

How to get all the possible 3 letter permutations?


Possible Duplicate:
Listing all permutations of a string/integer

For example,

aaa .. aaz .. aba .. abz .. aca .. acz .. azz .. baa .. baz .. bba .. bbz .. zzz

Basically, imagine counting binary but instead of going from 0 to 1, it goes from a to z.

I have been trying to get this working to no avail and the formula is getting quite complex. I'm not sure if there's a simpler way to do it.

Edit

I have something like this at the moment but it's not quite there and I'm not sure if there is a better way:

private IEnumerable<string> GetWordsOfLength(int length)
{
    char letterA = 'a', letterZ = 'z';

    StringBuilder currentLetters = new StringBuilder(new string(letterA, length));
    StringBuilder endingLetters = new StringBuilder(new string(letterZ, length));

    int currentIndex = length - 1;

    while (currentLetters.ToString() != endingLetters.ToString())
    {
        yield return currentLetters.ToString();

        for (int i = length - 1; i > 0; i--)
        {
            if (currentLetters[i] == letterZ)
            {
                for (int j = i; j < length; j++)
                {
                    currentLetters[j] = letterA;
                }

                if (currentLetters[i - 1] != letterZ)
                {
                    currentLetters[i - 1]++;
                }
            }
            else
            {
                currentLetters[i]++;

                break;
            }
        }
    }
}

Solution

  • For a variable amount of letter combinations, you can do the following:

    var alphabet = "abcdefghijklmnopqrstuvwxyz";
    var q = alphabet.Select(x => x.ToString());
    int size = 4;
    for (int i = 0; i < size - 1; i++)
        q = q.SelectMany(x => alphabet, (x, y) => x + y);
    
    foreach (var item in q)
        Console.WriteLine(item);