前言
种一棵树最好的时间是十年前,其次是现在
絮叨
今天群友,分享了一道力扣题,然后刚好我早上没啥事,就去做了一下,然后顺便记录一下,不过顺便说一下,小六六群里的学习氛围还真的不错,这也是我检查分享的一个重要原因吧,大佬也很多,字节的大佬,还有很多在校生,反正如果你没有一个很好的学习氛围的话,小六六学习群是个不错的选择。哈哈扯远了,我们来看看群友出的题,还算蛮简单,但是由于基础的原因,也没做到多好
题目
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。不考虑答案输出的顺序。
我们来解一下题目的意思,其实就是说要把数组里面的元素,一个个把它去做对比,找出里面字符串有不同的数据就好了,其实我一开始还没想到,想着一个个去对比,我的天,那样太复杂了,后面想到了把字符串排序之后,那如果是包含相同的字符串的话,那就是一样的了,哈哈,那就比较简单了,来看下小六六写的代码
解题
package com.liuliu.nio.test;
import java.util.*;
/**
* @author 小六六
* @version 1.0
* @date 2020/9/2 9:16
*
* 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
*
* 示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
* 输出:
* [
* ["ate","eat","tea"],
* ["nat","tan"],
* ["bat"]
* ]
*说明:
*
* 所有输入均为小写字母。
* 不考虑答案输出的顺序。
*
*/
public class GroupAnagrams {
public List<List<String>> groupAnagrams(String[] strs) throws Exception {
if (null == strs) {
return new ArrayList<>();
}
List<List<String>> listList = new ArrayList<>();
HashMap<String, List<String>> map = new HashMap();
for (String str : strs) {
//treeSet 去重了 ,不符合结果
// TreeSet<String> treeSet = new TreeSet<String>();
// String[] split = str.split("");
// for (String s : split) {
// treeSet.add(s);
// }
// StringBuffer s = new StringBuffer();
// for (String s1 : treeSet) {
// s.append(s1);
// }
//另外的排序方案
char[] chs1 = str.toCharArray();
Arrays.sort(chs1);
String s = String.valueOf(chs1);
if (map.containsKey(s.toString())) {
map.get(s.toString()).add(str);
} else {
List<String> strings1 = new ArrayList<>();
strings1.add(str);
map.put(s.toString(), strings1);
}
}
listList.addAll(map.values());
System.out.println(listList.toString());
return listList;
}
public static void main(String[] args) throws Exception {
String[] strings = {"eat", "tea", "tan", "ate", "nat", "bat"};
String[] strings1={"ddddddddddg","dgggggggggg"};
GroupAnagrams groupAnagrams = new GroupAnagrams();
List<List<String>> lists = groupAnagrams.groupAnagrams(strings1);
}
}
对于字符串排序,我一开始想到了treeset,但是提交的时候不通过,原因是treeSet它是一个去重并排序的set,这个就很尴尬了,和人家的要求不符合,然后我就把字符串变成一个Char[] 再去排序,然后在变回来string 发现是可以的
来看看Python的解法
class Solution(object):
def groupAnagrams(self, strs):
ans = collections.defaultdict(list)
for s in strs:
ans[tuple(sorted(s))].append(s)
return ans.values()
我擦,字典是真的香呀,这多么简单。代码量是真的少,羡慕。哈哈。
结尾
花点时间总结分享一下,虽然小六六很菜,但是我可以越菜越学到越学越菜嘛,哈哈 你懂的越多,你就越菜。