【LeetCode】TOP100-字母异位词
题目
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例
示例 1:
1 | 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] |
示例 2:
1 | 输入: strs = [""] |
示例 3:
1 | 输入: strs = ["a"] |
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
思考
我开始尝试的方向是把字母数字和相同的字符串作为字母异位词 。但这明显不可行,相等的不一定包含相同字符。
于是看到这个提示是采用哈希表实现。哈希表的特点就是key-value
存储,一个key
可以存在多个value
。那么如何得到这个key就是突破方向。
考虑到,字母异位词字母是一样的,只是顺序变了,它们还得共用同一个key
。这个key
就是字符排序后的字符串,例如,”eat”和”ate”,遍历字符串后,把字符排序后,两个是相等的**”aet”。所以这里字符排序就是相应的哈希函数**了:hash(x) = key,得到的该字符串可以作为哈希表的key
值。然后把key
对应的value
都添加到哈希表。
源码:
1 | class Solution { |
C++知识
emplace_back 接口
通常我们添加数据到数组是用push_back
,这里使用的是emplace_back
,作用是在容器的末尾添加一个新的元素,这个元素是通过调用构造函数在原地构造的,不需要触发拷贝构造和移动构造。因此,emplace_back
比push_back
更加高效,可以节省内存和时间。emplace_back
的用法是:
1 | vector<T> v; // 创建一个vector容器 |
map容器中first和second
map 容器是一种存储键值对(key-value pairs)的数据结构,可以根据键快速查找对应的值。迭代器是一种可以遍历容器中元素的对象,可以使用 -> 运算符访问元素的属性。
上述代码中it->second
表示迭代器 it
指向的值;it->first
是迭代器指向的键(key)值。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 立青!
评论