当前位置: 面试刷题>> 单词缩写集 (经典算法题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));
```
**码小课**网站中有更多关于算法和数据结构的精彩内容,欢迎大家前去学习交流。