Python
Coding
Word Puzzles
Jumbled Words
Programming Tips

Solving jumbled word puzzles with python?

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

Introduction

The brute-force way to solve a jumbled word is to generate every permutation of its letters and check which permutations are valid words. That works for very short inputs, but it becomes unusable quickly because the number of permutations grows factorially.

Use a Sorted-Letters Dictionary

The practical solution is to preprocess a dictionary of valid words by storing them under a normalized signature such as their sorted letters.

python
1from collections import defaultdict
2
3
4def build_index(words):
5    index = defaultdict(list)
6    for word in words:
7        key = "".join(sorted(word.lower()))
8        index[key].append(word)
9    return index
10
11
12words = ["stone", "tones", "notes", "apple", "silent", "listen"]
13index = build_index(words)
14
15query = "onest"
16matches = index.get("".join(sorted(query.lower())), [])
17print(matches)
text
['stone', 'tones', 'notes']

This is the core trick. Any anagram of the same letters ends up with the same sorted-letter key.

Why This Beats Permutations

For a word of length n, permutations require examining up to n! arrangements. The index-based method only sorts the query letters once, which is much cheaper.

That makes the algorithm practical for:

  • anagram solvers
  • jumbled-word puzzle helpers
  • word-game assistants
  • repeated lookups against the same dictionary

If you will solve many puzzles, the preprocessing step is easily worth it.

A Reusable Solver Function

Wrap the pattern in a helper:

python
1from collections import defaultdict
2
3
4class JumbleSolver:
5    def __init__(self, words):
6        self.index = defaultdict(list)
7        for word in words:
8            key = "".join(sorted(word.lower()))
9            self.index[key].append(word)
10
11    def solve(self, letters):
12        key = "".join(sorted(letters.lower()))
13        return self.index.get(key, [])
14
15
16solver = JumbleSolver(["stone", "tones", "notes", "silent", "listen"])
17print(solver.solve("eilnst"))

This is the right design when the word list stays mostly fixed and you want fast repeated queries.

Handling Repeated Letters

Repeated letters are already handled by the sorted-signature approach. For example, letter and trelet map to the same signature because the sorted key contains repeated t and e characters in the correct counts.

That is important because a set-based approach would lose frequency information and break the puzzle logic.

Where the Dictionary Comes From

The solver is only as good as its word list. For a toy script, a hard-coded list is enough. For something more realistic, load words from a text file:

python
def load_words(path):
    with open(path, "r", encoding="utf-8") as f:
        return [line.strip() for line in f if line.strip()]

Then build the index once at startup. If you expect uppercase input or accented characters, normalize the dictionary and the queries the same way.

What About Multi-Word Puzzles

Single-word jumbles are straightforward with this technique. Multi-word puzzles are harder because you must search combinations of words whose combined letters match the puzzle letters. That becomes a constrained search problem rather than a simple dictionary lookup.

For single jumbled words, though, the sorted-signature index is usually the best tradeoff between simplicity and speed.

Common Pitfalls

  • Generating every permutation when a normalized dictionary index would be much faster.
  • Using a set of characters instead of preserving repeated-letter counts.
  • Forgetting to normalize case consistently between the dictionary and the query.
  • Expecting a solver to work well without a clean and relevant word list.
  • Treating multi-word anagram puzzles as though they were the same problem as single-word jumbles.

Summary

  • The efficient way to solve jumbled words is to map dictionary words by a normalized letter signature.
  • Sorting the letters of a word is a simple and effective signature for single-word anagrams.
  • This approach handles repeated letters correctly and avoids factorial-time permutation search.
  • Build the index once if you need to solve many puzzles.
  • The quality of the result depends heavily on the quality of the underlying dictionary.

Related reading
Free course
Beginner
7 lessons
2 hours
Tackling System Design Interview Problems

A short course that equips you with the skills to approach system design interviews methodically.

Start the free course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

Interview Questions practice on Codemia

Over 8,000 real interview questions from top companies, searchable by company and role.

Browse interview questions

All Rights Reserved.