给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。
字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。
说明:
字母异位词指字母相同,但排列不同的字符串 。
不考虑答案输出的顺序 。
输入 s : “cbaebabacd” p : “abc”
输出 [ 0 , 6 ]
解释: 起始索引等于 0 的子串是 “cba”, 它是“abc” 的字母异位词
起始索引等于 6 的子串是 “bac”, 它是 “abc” 的字母异位词 。
public List<List<String>> groupAnagrams(String[] strs) {
//返回值是List List里面是List 装的String 定义一个HashMap 值为List
Map<String, List> map = new HashMap<String, List>();
for (String i : strs) {
char[] arr = i.toCharArray();
Arrays.sort(arr);
String str = String.valueOf(arr);
if (!map.containsKey(str)) {
//若不存在建立映射关系 排序后的字符串—>新的List集合(装未排序的异位词)
map.put(str, new ArrayList());
}
//建立映射关系户后添加 以及存在映射关系后添加单词
map.get(str).add(i);
}
//返回值是List集合 通过构造器 构造一个包含指定 collection 的元素的列表
return new ArrayList(map.values());
}