LeetCode 527, Hard. Topics: Greedy, Trie, Array, String, Sorting. View on LeetCode.
Generate this problem as a practice environment: tested reference solution, 15 parametrized pytest cases, and a playground notebook:
Problem
Given an array of distinct strings words, return the minimal possible abbreviations for every word.
The following are the rules for a string abbreviation:
- The initial abbreviation for each word is: the first character, then the number of characters in between, followed by the last character.
- If more than one word shares the same abbreviation, then perform the following operation:
- Increase the prefix (characters in the first part) of each of their abbreviations by
1.
- For example, say you start with the words
["abcdef","abndef"] both initially abbreviated as "a4f". Then, a sequence of operations would be ["a4f","a4f"] -> ["ab3f","ab3f"] -> ["abc2f","abn2f"].
- This operation is repeated until every abbreviation is unique.
- At the end, if an abbreviation did not make a word shorter, then keep it as the original word.
Examples
Constraints
1 <= words.length <= 400
2 <= words[i].length <= 400
words[i] consists of lowercase English letters.
- All the strings of
words are unique.
Solution
Reference implementation from solution.py on GitHub, full suite in test_solution.py:
Complexity
Last modified on September 7, 2026