728x90
반응형
▷ 문제
S문자열에서 T문자열과 아나그램이 되는 S의 부분문자열의 개수를 구하는 프로그램을 작성하세요.
아나그램 판별시 대소문자가 구분됩니다. 부분문자열은 연속된 문자열이어야 합니다.
* 입력
첫 줄에 첫 번째 S문자열이 입력되고, 두 번째 줄에 T문자열이 입력됩니다.
S문자열의 길이는 10,000을 넘지 않으며, T문자열은 S문자열보다 길이가 작거나 같습니다.
* 출력
S단어에 T문자열과 아나그램이 되는 부분문자열의 개수를 출력합니다.
▷ 입력 예시
bacaAacba
abc
▷ 출력 예시
3
▷ 풀이
import java.util.Scanner;
import java.util.HashMap;
public class Main {
public int solution(String n, String k){
int answer = 0;
HashMap<Character, Integer> map1 = new HashMap<Character, Integer>();
HashMap<Character, Integer> map2 = new HashMap<Character, Integer>();
for(char x : k.toCharArray()) {
map2.put(x, map2.getOrDefault(x, 0) + 1);
}
int L = k.length()-1;
for(int i=0; i<L; i++){
map1.put(n.charAt(i), map1.getOrDefault(n.charAt(i), 0) + 1);
}
int lt = 0;
for(int rt=L; rt<n.length(); rt++){
map1.put(n.charAt(rt), map1.getOrDefault(n.charAt(rt),0) + 1);
if(map1.equals(map2)){
answer++;
}
map1.put(n.charAt(lt), map1.get(n.charAt(lt))-1);
if(map1.get(n.charAt(lt)) == 0){
map1.remove(n.charAt(lt));
}
lt++;
}
return answer;
}
public static void main(String[] args){
Main main = new Main();
Scanner kb = new Scanner(System.in);
String n = kb.next();
String k = kb.next();
System.out.println(main.solution(n, k));
}
}
반응형
'Algorithm > HashMap, ArrayList' 카테고리의 다른 글
[알고리즘 문제]K번째 큰 수 - List의 중복 제거, 역순 정렬 (0) | 2021.10.24 |
---|---|
[알고리즘]매출액의 종류 (0) | 2021.10.20 |
[알고리즘]아나그램 (0) | 2021.10.20 |
[알고리즘]학급 회장구하기 (0) | 2021.10.20 |