import java.util.*;
class Main {
public int solution(String a, String b) {
int answer = 0;
HashMap<Character, Integer> am = new HashMap<>();
HashMap<Character, Integer> bm = new HashMap<>();
for(char x : b.toCharArray()) bm.put(x, bm.getOrDefault(x, 0)+1);
int L = b.length()-1;
for(int i=0; i<L; i++) am.put(a.charAt(i), am.getOrDefault(a.charAt(i), 0)+1);
int lt = 0;
for(int rt=L; rt<a.length(); rt++){
am.put(a.charAt(rt), am.getOrDefault(a.charAt(rt), 0)+1);
if(am.equals(bm)) answer++;
am.put(a.charAt(lt), am.get(a.charAt(lt))-1);
if(am.get(a.charAt(lt)) == 0) am.remove(a.charAt(lt));
lt++;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.next();
System.out.println(T.solution(a,b));
}
}
포함되어야 할 문자열을 일단 총 길이-1만큼 키와 값을 세팅하고,
rt를 총길이의 인덱스부터 시작하여 하나씩 증가하고 lt는 하나씩 감소하며 sliding window로 밀고 나간다.
그와 동시에 포함되어야할 문자열과 비교하면서 같으면 답을 증가시킨다.
이 때도 lt가 감소되다 0이 되면 hashMap에서 지워줘야한다.