https://www.acmicpc.net/problem/16472
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String word = br.readLine();
HashMap<Character,Integer> alpha = new HashMap();
int count_alpha=0;
int ans=0;
int right=0;
for(int left=0; left<word.length();left++){
while(right<word.length() && count_alpha<=n){
alpha.put(word.charAt(right),alpha.getOrDefault(word.charAt(right),0)+1);
if(alpha.get(word.charAt(right))==1){
count_alpha++;
}
if(count_alpha<=n){
ans = Math.max(ans,right-left+1);
}
right++;
}
alpha.put(word.charAt(left),alpha.get(word.charAt(left))-1);
if(alpha.get(word.charAt(left))==0){
count_alpha-=1;
}
}
System.out.println(ans);
}
}
import java.util.Scanner;
class Main
{
static int[] currentAlphabetFrequency = new int[26];
static int currentUniqueAlphabetCount = 0;
static void increaseFrequency(char alphabet) {
if (currentAlphabetFrequency[alphabet - 'a']++ == 0)
currentUniqueAlphabetCount++;
}
static void decreaseFrequency(char alphabet) {
if (--currentAlphabetFrequency[alphabet - 'a'] == 0)
currentUniqueAlphabetCount--;
}
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
char[] nyang = sc.next().toCharArray();
int nextIndex = 0;
int maxLength = 0;
for (int i = 0; i < nyang.length; i++) {
while (nextIndex < nyang.length) {
increaseFrequency(nyang[nextIndex++]);
if (currentUniqueAlphabetCount > N) {
decreaseFrequency(nyang[--nextIndex]);
break;
}
}
maxLength = Math.max(maxLength, nextIndex - i);
decreaseFrequency(nyang[i]);
}
System.out.println(maxLength);
}
}
'Problem Solving > 투포인터' 카테고리의 다른 글
슬라이딩 윈도우 개념 (0) | 2024.03.05 |
---|---|
BOJ14465 소가 길을 건너간 이유 5 (0) | 2024.03.05 |
BOJ15831 준표의 조약돌 (1) | 2024.03.04 |
BOJ17609 회문 (0) | 2024.03.04 |
BOJ11728 배열합치기 (0) | 2024.03.04 |