작성
·
14
·
수정됨
0
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String s = in.nextLine();
String s2 = in.nextLine();
System.out.println(Solution.solution(s, s2));
}
}
class Solution{
public static int solution(String s , String s2){
int ans = 0;
HashMap<Character, Integer> map = new HashMap<>();
HashMap<Character, Integer> map2 = new HashMap<>();
for(char c : s2.toCharArray()){
map2.put(c, map2.getOrDefault(c, 0) + 1);
}
for(int i = 0; i<s2.length(); i++){
map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
}
if(map.equals(map2)){
ans++;
}
for(int i = s2.length(); i < s.length(); i++){
map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0)+1);
if(map.get(s.charAt(i- s2.length())) == 1){
map.remove(s.charAt(i- s2.length()));
}else{
map.put(s.charAt(i-s2.length()), map.get(s.charAt(i-s2.length())) - 1);
}
if(map.equals(map2)){
ans++;
}
}
return ans;
}
}
전 강의에서는 항상 기존 b의 길이만큼 먼저 계산을 해주고 비교를 한후에 하나를 추가해주고 기존꺼를 제거하는 방식으로 저는 이해해를 해서 그런식으로 풀고 있었는데
강사님 코드 결론은 마지막에 b길이를 채워 주고나서 비교하고 나서 이전껄 빼고 새로운걸 추가시키고 비교하는 방식으로 하시는거 같은데 방식이 달라 어떤걸 더 봐야할지 모르겠습니다.
답변