서로 다른 부분 문자열의 갯수를 구하는 문제이다 보니 중복 제거가 필요하다 생각하여 HashSet 을 사용해야 한다고 생각했다. 또한 부분 문자열이 필요하니 String.subString() 을 사용했다.
소스코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashSet;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 중복이 아닌 배열을 생성해야 하기 때문에 HashSet 사용
HashSet<String> set = new HashSet<>();
String S = br.readLine();
for(int i=0;i<S.length();i++)
{
String name = "";
for(int j=i;j<S.length();j++)
{
name +=S.substring(j, j+1);
set.add(name);
}
}
// 배열(HashSet)의 크기를 출력
System.out.println(set.size());
}
}
for문에서 name 을 출력하면 아래와 같다.
첫글자부터 한글자씩 더해 전체 String 의 배열을 만들고 중복을 제거하는 방식이다.
$ java Main.java
ababc
a
ab
aba
abab
ababc
b
ba
bab
babc
a
ab
abc
b
bc
c