/*
* @lc app=leetcode.cn id=438 lang=javascript
*
* [438] 找到字符串中所有字母异位词
*/
// @lc code=start
/**
* @param {string} s
* @param {string} p
* @return {number[]}
*/
var findAnagrams = function (s, p) {
// 1. 超时
// const target = Array.from(p).sort().toString();
// const plen = p.length;
// const slen = s.length;
// if (slen < plen) return []
// const result = []
// for (let i = 0; i <= slen - plen; i++) {
// const cur = Array.from(s.slice(i, i + plen)).sort().toString();
// if (cur === target) {
// result.push(i);
// }
// }
// return result;
// 2. 哈希
const slen = s.length, plen = p.length;
if (slen < plen) return []
const result = []
const sCount = new Array(26).fill(0)
const pCount = new Array(26).fill(0)
for (let i = 0; i < plen; i++) {
++pCount[p[i].charCodeAt() - 'a'.charCodeAt()];
++sCount[s[i].charCodeAt() - 'a'.charCodeAt()];
}
if (pCount.toString() === sCount.toString()) {
result.push(0)
}
for (let j = 0; j < slen - plen; j++) {
--sCount[s[j].charCodeAt() - 'a'.charCodeAt()];
++sCount[s[j + plen].charCodeAt() - 'a'.charCodeAt()];
if (sCount.toString() === pCount.toString()) {
result.push(j + 1)
}
}
return result;
};
// @lc code=end
console.log(findAnagrams('abab', 'ab'))