剑指 Offer II 015. 字符串中的所有变位词(438. 找到字符串中所有字母异位词)
题目:
思路:
【1】利用滑动窗口加字符集数组的思想(还有官方的题解真鸡儿复杂,感觉一样的思路,看到些那么多就没有看下去了)
代码展示:
利用滑动窗口加字符集数组的思想的方式:
//时间7 ms击败75.57% //内存42.2 MB击败95.1% class Solution { public List<Integer> findAnagrams(String s, String p) { ArrayList<Integer> res = new ArrayList<>(); if (p.length() > s.length()) return res; //由于s 和 p 仅包含小写字母 int[] flag1 = new int[26] , flag2 = new int[26]; for (char ch : p.toCharArray()){ flag1[ch - 'a'] += 1; } //利用滑动窗口大的思想,窗口大小为p.length()的大小 char[] sArr = s.toCharArray(); for (int i = 0; i < p.length() - 1; i++){ flag2[sArr[i] - 'a'] += 1; } for (int i = p.length() - 1; i < sArr.length; i++){ flag2[sArr[i] - 'a'] += 1; if (Arrays.equals(flag1,flag2)) res.add(i + 1 - p.length()); flag2[sArr[i + 1 - p.length()] - 'a'] -= 1; } return res; } }