题目
编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。
示例:
1 | 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], |
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
题解思路
方法一:遍历数组,将当前遍历到的元素跟剩下的其他元素进行对比,符合要求(字母相同,但排列不同)的归类到同一组,不符合要求的单独归类一组。重点就是如何判断当前元素是否符合要求,是否有对应可以归类 的数组。字母相同,但排列不同,可知,两个元素
length
相同,并且A字符串里面的所有字符都应该在B字符串里能找到相同的元素,同时B字符串里面的所有字符也都应该在A字符串里能找到相同的元素。并且当前元素没有被归类过。这样的话,如果,已归类的数组里没有找到与该元素字母相同,但排列不同的元素,那就单独归类到一组,等待其他元素加入,否则,就把该元素加入到符合要求的那一组中去。弊端:多次循环遍历数组实现,效率较低,执行时间慢。
方法二:看到字母相同,但排列不同这几个字眼,应该能立马想到既然是字母都相同,那我让所有元素都按字母排序好再进行比较,不就能直接判断两个元素是否相等了吗,相等的话
push
到同一个归类数组里,否则单独给他push
到一个归类数组,等待下一个元素加入。但是你排序后,要返回的还是排序前的字母。所以,有没有一种数据结构既能保存两种状态?相比较于Object,Map更能轻松的获取键值对和判断是否存在某个值。这道题用Map和排序的思路可以很轻松的实现。并且代码量较少。
代码实现
方法一:
1 | /** |
方法二:
1 | /** |
我很可爱,请给我钱
- 本文链接:https://cong1223.github.io/2021/07/21/%E3%80%90%E7%AE%97%E6%B3%95%E3%80%91%E5%8F%98%E4%BD%8D%E8%AF%8D%E7%BB%84/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub IssuesGitHub Discussions