当前位置: 面试刷题>> 字母异位词分组(经典算法150题)
### 题目描述
**字母异位词分组**
给定一个字符串数组,将数组中的字符串按照字母异位词(即字母相同,但顺序不同的字符串)进行分组。字母异位词是指那些字母完全相同但顺序可能不同的字符串。
#### 示例
输入: `["eat", "tea", "tan", "ate", "nat", "bat"]`
输出:
```
[
["eat","tea","ate"],
["tan","nat"],
["bat"]
]
```
#### 思路
为了解决这个问题,我们可以利用哈希表(在PHP中为数组,Python和JavaScript中为对象或Map)来存储每个字符串的字母排序后作为键,而对应的值则是一个数组,用于存储所有该键对应的字母异位词。
### 示例代码
#### PHP 示例
```php
function groupAnagrams($strs) {
$result = [];
foreach ($strs as $str) {
$sortedStr = str_split($str);
sort($sortedStr);
$sortedStr = implode('', $sortedStr);
if (!isset($result[$sortedStr])) {
$result[$sortedStr] = [];
}
$result[$sortedStr][] = $str;
}
// 将结果转换为题目要求的格式
return array_values($result);
}
// 示例用法
$input = ["eat", "tea", "tan", "ate", "nat", "bat"];
$output = groupAnagrams($input);
print_r($output);
```
#### Python 示例
```python
def groupAnagrams(strs):
result = {}
for str in strs:
sorted_str = ''.join(sorted(str))
if sorted_str not in result:
result[sorted_str] = []
result[sorted_str].append(str)
# 转换为列表形式
return [result[key] for key in result]
# 示例用法
input_strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
output = groupAnagrams(input_strs)
print(output)
```
#### JavaScript 示例
```javascript
function groupAnagrams(strs) {
const result = {};
for (let str of strs) {
const sortedStr = str.split('').sort().join('');
if (!result[sortedStr]) {
result[sortedStr] = [];
}
result[sortedStr].push(str);
}
// 转换为数组
return Object.values(result);
}
// 示例用法
const inputStrs = ["eat", "tea", "tan", "ate", "nat", "bat"];
const output = groupAnagrams(inputStrs);
console.log(output);
```
以上示例代码展示了如何在PHP、Python和JavaScript中实现字母异位词的分组。每个示例都首先通过排序字符串中的字符来生成一个键,然后使用这个键在哈希表中查找或存储对应的字母异位词列表。最后,根据需要将哈希表的值转换为题目要求的输出格式。