관심 코드와 입고 기록 두 개의 대문자 문자열이 주어진다. 관심 코드에 있는 각 글자가 입고 기록에 몇 번 등장하는지 세고, 그중 최댓값을 출력한다.
두 문자열이 등장하는 순간 방향을 먼저 정해야 한다.
두 문자열을 한 번씩만 보면 끝난다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine().trim());
for (int tc = 1; tc <= T; tc++) {
String code = br.readLine().trim();
String record = br.readLine().trim();
int[] count = new int[26];
for (int i = 0; i < record.length(); i++) {
count[record.charAt(i) - 'A']++;
}
int max = 0;
for (int i = 0; i < code.length(); i++) {
max = Math.max(max, count[code.charAt(i) - 'A']);
}
sb.append('#').append(tc).append(' ').append(max).append('\n');
}
System.out.print(sb);
}
}
시간복잡도: O(N + M) — 각 문자열을 한 번씩 훑는다. 카운팅 배열은 크기 26 고정이라 초기화 비용도 상수다.
공간복잡도: O(1) — 배열 크기가 입력과 무관하게 26으로 고정된다.