当前位置: 面试刷题>> 单词缩写集 (经典算法题500道)


### 题目描述补充 题目:**单词缩写集** 给定一个字符串数组 `words`,其中每个字符串代表一个单词。要求编写一个函数,该函数接收 `words` 数组作为输入,并返回一个包含所有单词缩写的集合(不重复),缩写规则如下: - 单词缩写仅保留首字母和尾字母,如果单词仅有两个字符长,则缩写就是它本身。 - 如果单词包含中间的重复字符(如 "aa"),则这些重复字符在缩写中仅保留一个。 - 结果集合中的缩写需按照它们在 `words` 数组中出现的顺序进行排序,并且不重复。 **示例输入**: ```python words = ["internationalization", "zoom", "leetcode", "word", "keys"] ``` **示例输出**: ```python ["i1n", "zo", "l3e", "wrd", "ks"] ``` **解释**: - "internationalization" 缩写为 "i1n"(首字母 'i',中间非重复字符 '1' 代表中间的长度,尾字母 'n')。 - "zoom" 缩写为 "zo"(因为它只有两个字符)。 - "leetcode" 缩写为 "l3e"('l' 是首字母,'3' 表示中间有三个字符,'e' 是尾字母)。 - "word" 缩写为 "wrd"(去除中间的 'o' 因为它是重复的)。 - "keys" 缩写为 "ks"(直接取首尾字母)。 ### PHP 示例代码 ```php function abbreviateWords($words) { $abbrevs = []; foreach ($words as $word) { $length = strlen($word); if ($length <= 2) { $abbrevs[] = $word; } else { $first = $word[0]; $last = $word[$length - 1]; $middle = ''; $prevChar = $first; for ($i = 1; $i < $length - 1; $i++) { if ($word[$i] != $prevChar) { $middle .= '1'; $prevChar = $word[$i]; } } $abbrevs[] = $first . strlen($middle) . $last; } } $abbrevs = array_unique($abbrevs); sort($abbrevs); return $abbrevs; } // 示例 $words = ["internationalization", "zoom", "leetcode", "word", "keys"]; print_r(abbreviateWords($words)); ``` ### Python 示例代码 ```python def abbreviate_words(words): abbrevs = [] for word in words: length = len(word) if length <= 2: abbrevs.append(word) else: middle_count = sum(1 for i in range(1, length - 1) if word[i] != word[i - 1]) abbrevs.append(word[0] + str(middle_count) + word[-1]) return sorted(set(abbrevs)) # 示例 words = ["internationalization", "zoom", "leetcode", "word", "keys"] print(abbreviate_words(words)) ``` ### JavaScript 示例代码 ```javascript function abbreviateWords(words) { const abbrevs = []; for (const word of words) { const length = word.length; if (length <= 2) { abbrevs.push(word); } else { let middleCount = 0; let prevChar = word[0]; for (let i = 1; i < length - 1; i++) { if (word[i] !== prevChar) { middleCount++; prevChar = word[i]; } } abbrevs.push(word[0] + middleCount + word[length - 1]); } } return [...new Set(abbrevs)].sort(); } // 示例 const words = ["internationalization", "zoom", "leetcode", "word", "keys"]; console.log(abbreviateWords(words)); ``` **码小课**网站中有更多关于算法和数据结构的精彩内容,欢迎大家前去学习交流。
推荐面试题