[BOJ]20437号:文字列ゲーム2(Java)
12030 ワード
問題金メダル5
質問の表示
に答える
3、4の条件が異なるように見えるかもしれませんが、3番も最も短い文字列であれば、最初の文字と最後の文字は対応する文字でなければなりません.
💡 したがって,3,4号は同じ条件であり,条件の最短,最長の長さを求めればよい.
3、4の条件が異なるように見えるかもしれませんが、3番も最も短い文字列であれば、最初の文字と最後の文字は対応する文字でなければなりません.
💡 したがって,3,4号は同じ条件であり,条件の最短,最長の長さを求めればよい.
コード#コード# package implement;
import java.io.*;
import java.util.*;
public class BOJ_20437_문자열게임2 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int tc = 0 ; tc < T ; tc++){
String W = br.readLine();
int K = Integer.parseInt(br.readLine());
List<Integer>[] alpha = new List[26];
for(int i =0 ; i < 26 ; i ++) alpha[i] = new ArrayList<>();
int min = Integer.MAX_VALUE; // 3번 조건
int max = Integer.MIN_VALUE; // 4번 조건
for(int i =0 ; i < W.length() ; i++){
int idx = W.charAt(i)-'a';
alpha[idx].add(i); // 알파벳 배열에 인덱스 추가
if(alpha[idx].size() == K){ // 3,4번 조건을 만족한다면!
int length = i - alpha[idx].get(0) + 1;
min = Math.min(length, min); // 3번 결과값 갱신
max = Math.max(length, max); // 4번 결과값 갱신
alpha[idx].remove(0); // 맨 처음 들어온 인덱스 삭제
}
}
if(min == Integer.MAX_VALUE) sb.append("-1\n");
else sb.append(min + " " + max + "\n");
}
System.out.println(sb);
}
}
送信
Reference
この問題について([BOJ]20437号:文字列ゲーム2(Java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@dot2__/BOJ-20437번-문자열-게임-2-Java
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
package implement;
import java.io.*;
import java.util.*;
public class BOJ_20437_문자열게임2 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int tc = 0 ; tc < T ; tc++){
String W = br.readLine();
int K = Integer.parseInt(br.readLine());
List<Integer>[] alpha = new List[26];
for(int i =0 ; i < 26 ; i ++) alpha[i] = new ArrayList<>();
int min = Integer.MAX_VALUE; // 3번 조건
int max = Integer.MIN_VALUE; // 4번 조건
for(int i =0 ; i < W.length() ; i++){
int idx = W.charAt(i)-'a';
alpha[idx].add(i); // 알파벳 배열에 인덱스 추가
if(alpha[idx].size() == K){ // 3,4번 조건을 만족한다면!
int length = i - alpha[idx].get(0) + 1;
min = Math.min(length, min); // 3번 결과값 갱신
max = Math.max(length, max); // 4번 결과값 갱신
alpha[idx].remove(0); // 맨 처음 들어온 인덱스 삭제
}
}
if(min == Integer.MAX_VALUE) sb.append("-1\n");
else sb.append(min + " " + max + "\n");
}
System.out.println(sb);
}
}
Reference
この問題について([BOJ]20437号:文字列ゲーム2(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@dot2__/BOJ-20437번-문자열-게임-2-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol