Simple string manipulation

Simple problem just performing string replacements. Reminds me of the same technique as bubble sort. Notice that after each replacement we have to break out of the inner loop since we're changing the text string. Code is down below, cheers, ACC.

Apply Substitutions - LeetCode

You are given a replacements mapping and a text string that may contain placeholders formatted as %var%, where each var corresponds to a key in the replacements mapping. Each replacement value may itself contain one or more such placeholders. Each placeholder is replaced by the value associated with its corresponding replacement key.

Return the fully substituted text string which does not contain any placeholders.

 

Example 1:

Input: replacements = [["A","abc"],["B","def"]], text = "%A%_%B%"

Output: "abc_def"

Explanation:

  • The mapping associates "A" with "abc" and "B" with "def".
  • Replace %A% with "abc" and %B% with "def" in the text.
  • The final text becomes "abc_def".

Example 2:

Input: replacements = [["A","bce"],["B","ace"],["C","abc%B%"]], text = "%A%_%B%_%C%"

Output: "bce_ace_abcace"

Explanation:

  • The mapping associates "A" with "bce""B" with "ace", and "C" with "abc%B%".
  • Replace %A% with "bce" and %B% with "ace" in the text.
  • Then, for %C%, substitute %B% in "abc%B%" with "ace" to obtain "abcace".
  • The final text becomes "bce_ace_abcace".

 

Constraints:

  • 1 <= replacements.length <= 10
  • Each element of replacements is a two-element list [key, value], where:
    • key is a single uppercase English letter.
    • value is a non-empty string of at most 8 characters that may contain zero or more placeholders formatted as %<key>%.
  • All replacement keys are unique.
  • The text string is formed by concatenating all key placeholders (formatted as %<key>%) randomly from the replacements mapping, separated by underscores.
  • text.length == 4 * replacements.length - 1
  • Every placeholder in the text or in any replacement value corresponds to a key in the replacements mapping.
  • There are no cyclic dependencies between replacement keys.

Seen this question in a real interview before?
1/5
Yes
No
Accepted
315
Submissions
364
Acceptance Rate
86.5%

public string ApplySubstitutions(IList> replacements, string text)
{
    Hashtable map = new Hashtable();
    foreach (List list in replacements)
    {
        map.Add(list[0], list[1]);
    }

    bool done = false;
    while (!done)
    {
        done = true;
        for (int i = 0; i < text.Length; i++)
        {
            if (text[i] == '%')
            {
                string pre = text.Substring(0, i);
                string key = text[i + 1].ToString();
                string post = text.Substring(i + 3);
                text = pre + (string)map[key] + post;
                done = false;
                break;
            }
        }
    }

    return text;
}

Comments

Popular posts from this blog

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

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

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