All Possible Codes

One of the most famous interview questions is to generate all possible codes given a string. Here is the extract from http://www.careercup.com/page?pid=facebook-interview-questions&sort=comments:

If a=1, b=2, c=3,....z=26. Given a string, find all possible codes that string can generate. Give a count as well as print the strings.
For example:
Input: "1123". You need to general all valid alphabet codes from this string.

Output List
aabc //a = 1, a = 1, b = 2, c = 3
kbc // since k is 11, b = 2, c= 3
alc // a = 1, l = 12, c = 3
aaw // a= 1, a =1, w= 23
kw // k = 11, w = 23


Notice that the induction part of the recursive solution isn't that complicated because we're only dealing with a mapping of either one digit (1-9) or two digits (10-26). The base case is simple. It seems exponential or highly polynomial, but works fine with moderate input size.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AllPossibleCodes
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 1)
            {
                Console.WriteLine("Usage: AllPossibleCodes.exe <number>");
                return;
            }

            Process(args[0], "");
        }

        static void Process(string number,
                            string code)
        {
            if (number == null ||
                number.Length == 0)
            {
                if (code != null &&
                    code.Length > 0)
                {
                    Console.WriteLine(code);
                }
                return;
            }

            Process(number.Substring(1), code + (Convert.ToChar('a' + (number[0] - '0') - 1)).ToString());
            if (number.Length > 1)
            {
                int n = Convert.ToInt32(number.Substring(0, 2));
                if (n <= 26)
                {
                    Process(number.Substring(2), code + (Convert.ToChar('a' + n - 1)).ToString());
                }
            }
        }
    }
}

Comments

Popular posts from this blog

Advent of Code - Day 6, 2024: BFS and FSM

Golang vs. C#: performance characteristics (simple case study)

Advent of Code - Day 7, 2024: Backtracking and Eval