import java.util.*;
class Main {
public int solution(String s, String t) {
int answer = 0, lt = 0;
int len = t.length();
HashMap<Character, Integer> sMap = new HashMap<>();
HashMap<Character, Integer> tMap = new HashMap<>();
//초기값
for(char x : t.toCharArray()) tMap.put(x, tMap.getOrDefault(x, 0)+1);
for(int i=0; i<len-1; i++) sMap.put(s.charAt(i), sMap.getOrDefault(s.charAt(i), 0)+1);
//rt 추가
for(int rt=len-1; rt<s.length(); rt++) {
sMap.put(s.charAt(rt), sMap.getOrDefault(s.charAt(rt), 0)+1);
//아나그램일시 answer++
if(sMap.equals(tMap)) answer++;
//lt값 빼기
sMap.put(s.charAt(lt), sMap.get(s.charAt(lt))-1);
if(sMap.get(s.charAt(lt)) == 0) sMap.remove(s.charAt(lt));
lt++;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String s = kb.next();
String t = kb.next();
System.out.println(T.solution(s,t)) ;
}
}
판별문자(t)를 해쉬맵에 넣고 비교할 문자(s)를 초기값으로 t의 len-1전까지 해쉬맵에 넣었다.
lt가 rt를 쫓아가는 sliding window를 통해
1) rt값을 넣는다
2) smap과 tmap을 비교한다(.equals)
++2.1) if(smap.equals(tmap)) answer++;
3) lt값을 빼준다.
++3.1) if(smap.get(s.charAt(lt)) == 0) 해당 lt의 key를 remove
4) lt 1증가
hashmap에서 .equals()메소드는
두 hashmap의 모든 key의 종류와 value를 모두 비교해 전부 같은지 확인한다.