算法-字母异位词分组
题录链接:49. 字母异位词分组 - 力扣(LeetCode)
描述:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
算法如下:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Solution {
//转换成数组排序
public String seqStr(String s)
{
//转换成字符串
char[] sArr= s.toCharArray();
//排序
for(int i=0;i<sArr.length-1;i++)
{
for(int j=0;j<sArr.length-1-i;j++)
{
if(sArr[j]>sArr[j+1])
{
char tem=sArr[j];
sArr[j]=sArr[j+1];
sArr[j+1]=tem;
}
}
}
return new String(sArr);
}
public List<List<String>> groupAnagrams(String[] strs) {
Map<String,List<String>> kMap=new HashMap<>();
for(int i=0;i<strs.length;i++)
{
String s1=seqStr(strs[i]);
if(kMap.containsKey(s1))
{
//存在就添加到列表里
List<String> s1Arr=kMap.get(s1);
s1Arr.add(strs[i]);
kMap.put(s1,s1Arr);
}else
{
//不存在就添加
List<String> s2=new ArrayList<>();
s2.add(strs[i]);
kMap.put(s1,s2);
}
}
//添加结果
List<List<String>> w=new ArrayList<>();
for(Map.Entry<String,List<String>> listEntry:kMap.entrySet())
{
w.add(listEntry.getValue());
}
System.out.println(w);
//返回处理结果
return w;
}
}