본문 바로가기
Coding Test Java

인프런 - 모든 아나그램 찾기

by seonggu 2024. 1. 22.
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);
            // 키값으로 비교 배열이지만 그대로쓰면 String처럼 쓸 수 있음.
            if(am.equals(bm)) answer++;

            // a.chatAt(lt)에 해당하는 key값의 value -1
            am.put(a.charAt(lt), am.get(a.charAt(lt))-1);

            // lt 값이 0이면 카운팅되지 않게 삭제.
            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.print(T.solution(a, b));
    }
}