Title:Find All Anagrams in a String 438
Difficulty:Easy
原题leetcode地址: https://leetcode.com/problems/find-all-anagrams-in-a-string/
1. 见代码注释
时间复杂度:O(n),嵌套循环。
空间复杂度:O(n),申请Map和List。
/**
* 字符串p中的每一个数存到map中,将字符串s按照字符串p的长度每一位都存入map中,然后进行比较,注意==与equals的不同点
* @param s
* @param p
* @return
*/
public static List<Integer> findAnagrams(String s, String p) {
List<Integer> list = new ArrayList<>();
Map<Character, Integer> pMap = new HashMap<>();
int pLen = p.length();
for (int i = 0; i < p.length(); i++) {
pMap.put(p.charAt(i), pMap.getOrDefault(p.charAt(i), 0) + 1);
}
List<Map<Character, Integer>> sList = new ArrayList<>();
for (int i = 0; i <= s.length() - pLen; i++) {
Map<Character, Integer> sMap = new HashMap<>();
for (int j = 0; j < pLen; j++) {
sMap.put(s.charAt(i + j), sMap.getOrDefault(s.charAt(i + j), 0) + 1);
}
sList.add(sMap);
}
for (int i = 0; i < sList.size(); i++) {
int count = 0;
for (Character character : pMap.keySet()) {
System.out.println(pMap.get(character));
System.out.println(sList.get(i).get(character));
if (pMap.get(character).equals(sList.get(i).get(character))) {
count++;
}
}
if (count == pMap.size()) {
list.add(i);
}
}
return list;
}