import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Map;
public 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 kb = new Scanner(System.in);
String a = kb.next();
String b = kb.next();
System.out.println(T.solution(a, b));
}
}
배열 인덱스를 k-1개를 미리 세팅해 놓는 이유?
-> 미리 k-1개를 해싱해두고 그 다음 for문 부터 rt로 하나 추가해서 k개를 해싱해 아나그램인지 확인하고, lt로 하나 빼주고 하면서 계속 밀고 나가기 위함
'Algorithm > 문제' 카테고리의 다른 글
36. 올바른 괄호 (Stack) (0) | 2023.09.11 |
---|---|
35. K번째 큰 수 (TreeSet) (0) | 2023.09.06 |
33. 매출액의 종류 (1) | 2023.09.04 |
32. Anagram(해쉬) (0) | 2023.09.04 |
31. 학급 회장(해쉬) (0) | 2023.08.16 |