はじめに
自分用の備忘録、これを後で振り返ってイメトレできるように!
自分の中のレパートリー、コードのお道具箱を増やしていくイメージ。
問題文と公式解説
解答例 自作
簡単解説
- 重複しない値を格納したいハッシュセットを用意
- Nもじずつの値を取り出す。
for
文 - もし、
i + j
がSよりも長い、要するに取り出す位置が与えられた文字列Sの長さよりも長くなったら中のfor
を終えよう。(エラーになるから) - 取り出した値を格納する
注意点(将来の自分に)
for (int j = 1; j <= SLength; j++) {
ここ要注意。
substringのイメージを思い出そう!□□□□□□□□□が並んでいるイメージで。indexの区切りを入れるとすると、(ここから,index=0)0□1□2□3□4□5□6□7□8□9(ここまで, index=9)のイメージで。今回はi + j
が最後の9まで行ってほしいから!
import java.util.HashSet; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String S = sc.nextLine(); int SLength = S.length(); HashSet<String> hashset = new HashSet<String>(); for (int i = 0; i < SLength; i++) { for (int j = 1; j <= SLength; j++) { if (i + j > SLength) { break; } String temp = S.substring(i, i + j); hashset.add(temp); } } System.out.println(hashset.size()); } }
解答例 公式C++をJavaへ
きれい。。
学び
なるほど、こういう風(i + j <= s.length();
)にfor
文の条件を指定できるのですね。for(int j = 1; i + j <= s.length(); j++) {
import java.util.HashSet; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.next(); HashSet<String> st = new HashSet<>(); for(int i = 0; i < s.length(); i++) { for(int j = 1; i + j <= s.length(); j++) { st.add(s.substring(i, i + j)); } } System.out.println(st.size()); } } }