강의에서 제공한 풀이는 O(s*t)
이구요!
강사님이 질문 답변으로 제공한 O(n)
코드 올립니다!
동일한 투 포인터 풀이로 한 번 천천히 보시면 좋을 것 같아요👍🏻
function main(s, t) {
let hash = new Map();
for (let i = 0; i < t.length; i++) {
hash.set(t[i], (hash.get(t[i]) || 0) + 1);
}
for (let i = 0; i < t.length - 1; i++) {
hash.set(s[i], (hash.get(s[i]) || 0) - 1);
if (hash.get(s[i]) === 0) hash.delete(s[i]);
}
let lt = 0;
let result = 0;
for (let rt = t.length - 1; rt < s.length; rt++) {
hash.set(s[rt], (hash.get(s[rt]) || 0) - 1);
if (hash.get(s[rt]) === 0) hash.delete(s[rt]);
if (hash.size === 0) result++;
hash.set(s[lt], (hash.get(s[lt]) || 0) + 1);
if (hash.get(s[lt]) === 0) hash.delete(s[lt]);
if (hash.size === 0) result++;
lt++;
}
console.log(result);
}
main("bacaAacba", "abc");