思路1:排序+哈希
不难想到,两个词为字母异位词,本质上就是两个字符串排序之后的字符串相等。
所以我们可以建立一个哈希表<键:字符串 , 值:排序前的字符串数组>
接着枚举每一个字符串,将它排序作为键归类,然后插入哈希表的值数组即可。 #code-switcher
给定一个由字符串组成的数组,请将其中所有互为字母异位词的字符串归并到同一个组中。
字母异位词:两个字符串如果包含完全相同的字符,并且每个字符出现的次数也完全相同,只是字符的排列顺序可能不同,那么它们就互为字母异位词。换句话说,一个字符串可以通过重新排列另一个字符串的全部字符得到。
最终输出所有分组,分组之间的先后顺序没有限制。
约束条件
输入共两行。
第一行包含一个整数 n,表示字符串数组的长度。
第二行包含 n 个字符串,字符串之间用一个空格分隔。
每组字母异位词输出一行,同一组内的字符串用一个空格分隔。各组的输出顺序没有限制。
输入
8
evil vile live veil rat tar art dog
输出
dog
art rat tar
evil live veil vile
说明
输入中共有 8 个字符串。
evil、vile、live、veil 这 4 个字符串都由字符 e、i、l、v 组成,且每个字符都出现 1 次,因此它们互为字母异位词,归入一组。
rat、tar、art 这 3 个字符串都由字符 a、r、t 组成,归入另一组。
dog 与其他字符串不构成字母异位词,因此单独成为一组。
组内输出按字典序排列;组间的先后顺序没有限制。
输入
1
abc
输出
abc
说明
输入中只有 1 个字符串 abc。
因为没有其他字符串可以与它比较,它自然形成一个单独的字母异位词分组。
输入
6
ab ba ab cd dc ef
输出
ef
cd dc
ab ab ba
说明
输入中共有 6 个字符串。
ab、ba、ab 这 3 个字符串都由 1 个 a 和 1 个 b 组成,其中 ab 出现了 2 次,分组时需要保留所有出现次数,因此这一组输出为 ab ab ba。
cd、dc 这 2 个字符串都由 1 个 c 和 1 个 d 组成,归入一组。
ef 与其他字符串不构成字母异位词,单独成为一组。
组内已按字典序排列;组间的先后顺序没有限制。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册