https://www.acmicpc.net/problem/11478
11478번: 서로 다른 부분 문자열의 개수
첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다.
www.acmicpc.net
접근 :
- 문자열을 입력받는다.
- 문자열을 1개씩 체크해서 중복여부를 확인한 후 중복되지 않으면 저장한다.
- 문자열을 2개씩 체크해서 중복체크 후 저장한다.
- 문자열을 3개, 4개 , ... , 문자열 길이만큼 반복 체크해서 저장된 결과를 출력한다.
- 중복을 허용하지 않고 성능을 고려해야 함으로 HashSet을 사용하여 코드를 구현한다.
- 중복 체크는 2중 for문을 사용하여 모든 경우의 수를 체크한다.
코드구현 :
import java.io.*;
import java.util.HashSet;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String temp = "";
HashSet<String> sub_strings = new HashSet<>();
int result = 0;
for (int i = 0; i < input.length(); i++) {
for (int j = 0; j + i + 1 <= input.length(); j++) {
temp = input.substring(j, j + i + 1);
if (sub_strings.add(temp)) {
result++;
}
}
}
System.out.println(result);
br.close();
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 백준 3009 네 번째 점_기하1 (0) | 2023.03.06 |
---|---|
[JAVA] 백준 1085 직사각형에서 탈출_기하1 (0) | 2023.03.06 |
[JAVA] 백준 1269 대칭 차집합_집합과맵 (0) | 2023.03.05 |
[JAVA] 백준 1764 듣보잡_집합과맵 (0) | 2023.03.04 |
[JAVA] 백준 10816 숫자 카드 2_집합과맵 (0) | 2023.03.03 |