728x90
반응형
https://www.acmicpc.net/problem/1701
풀이
기존 kmp알고리즘을 이용하여 이중 for문으로 substring으로 할 시 HashSet<>을 써도 메모리초과가 납니다.
kmp알고리즘에서 사용되는 함수 중 getpi만을 이용하여 하시면 됩니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int max = 0;
for(int i = 0; i < s.length(); i++) {
max = Math.max(max, getpi(s.substring(i, s.length())));
}
System.out.print(max);
}
public static int getpi(String s) {
int[] pi = new int[s.length()];
int j = 0, max = 0;
for(int i = 1; i < s.length(); i++) {
while(j > 0 && s.charAt(i) != s.charAt(j)) {
j = pi[j - 1];
}
if(s.charAt(i) == s.charAt(j)) {
max = Math.max(max, pi[i] = j += 1);
}
}
return max;
}
}
728x90
반응형
'백준 > 1 - 5000' 카테고리의 다른 글
[백준] 4396번 : 지뢰 찾기(JAVA) (0) | 2021.09.05 |
---|---|
[백준] 1662번 : 압축(JAVA) (0) | 2021.08.30 |
[백준] 1786번 : 찾기(JAVA) (0) | 2021.08.26 |
[백준] 1003번 : 피보나치 함수(JAVA) (0) | 2021.08.23 |
[백준] 2749번 : 피보나치 수 3(JAVA) (0) | 2021.08.21 |
댓글