题目: 字母异位词分组
来自智得网
分析
排序法
因为字母异位词对应的单词中都是由相同的字母组合而成的,将这些单词按照字母序排序之后对应的字符串是相同的。所以可以将这些单词都首先进行排序,然后把相同的字符串对应的单词筛选出来作为一组就可以进行分组了。
算法流程
遍历所有的单词,将每个单词进行字母序排序。
用一个 Hash 表存储字母异位词的分组,Hash 表的 Key 是排序的字符串,Value 是一个List,是该字母异位词的所有的所有单词。
将排序之后的字符串作为 Key 逐个从 Hash 表中查询,如果获取的 Value 不为空,则将该单词添加到 List 中,否则新创建一个 List,将该单词存入 List 之后放入 Hash 表。
遍历 Hash 表,将所有的 Value 打印出来就是最终结果。
计数法
因为构成字母异位词的字符以及字符的个数是相同的,可以对组成字母的字符进行计数,将这些计数结果按照如下方式表示,例如eat可以表示为1a1e1t,之后和排序法的流程基本一致。
算法流程
遍历所有的单词,将构成每个单词的字符进行计数,之后按照字母序将这些计数结果表示出来。
用一个 Hash 表存储字母异位词的分组,Hash 表的 Key 是计数之后的字符串,Value 是一个List,是该字母异位词的所有的所有单词。
将计数之后的字符串作为 Key 逐个从 Hash 表中查询,如果获取的 Value 不为空,则将该单词添加到 List 中,否则新创建一个 List,将该单词存入 List 之后放入 Hash 表。
遍历 Hash 表,将所有的 Value 打印出来就是最终结果。