[Java]伯俊1543号[ドキュメント検索]Java


白俊1543号です.
https://www.acmicpc.net/problem/1543

質問する


勢俊は英語だけで構成されたドキュメントを検索するために関数を作成したいと思っています.この関数は、どの単語が全部で何回現れるかを数えます.しかし,ポテンシャル俊の関数は重複しており,数以外にも数えられる.たとえば、ドキュメントがababbaで、検索する単語がababaである場合、ポテンシャル俊のこの関数は0番から単語を検索するか、2番から検索することができます.しかし、同時に数えることはできません.
セジュンは、指定されたドキュメントと検索する単語を見て、その単語が最大数回現れ、繰り返されないプログラムを書いた.

入力


最初の行にドキュメントが表示されます.ファイルの長さは最大2500です.2行目は検索したい単語を与えます.この長さはせいぜい50です.ドキュメントと単語は、アルファベット小文字とスペースで構成されています.

しゅつりょく


出力の最初のローは、重複を避けるために最大数回発生します.

入力例

ababababa
aba

サンプル出力

2

考える


文字列内で必要な文字列を検索する方法.
ただし、重複しないため、見つかった文字は文字列から削除して進むことができます.
ここでString演算を行う場合
つまり、append、deleteは通常のStringよりStringBuilderに適しており、入力から
StringBuilderを使用して入力を受信します.
Stringは可変(不変)の性質を持つため,文字列演算に効率的ではない.
StringBuilderのappend、deleteを使用すると、より効率的にタスクを完了できます.

アクション


  • 		int count = 0;
    		int startIndex = 0;
    		int find_len = find.length();
    				
    		// find와 똑같은 문자열을 StringBuilder에서 찾아서 해당 index값을 가져옴
    		// 이후에 StringBuilder에서 delete작업을 하면됨.
    		// 그리고 count값 증가를 하면 답을 구할 수 있음
    		while((startIndex = sb.toString().indexOf(find)) != -1) {
    			sb.delete(0, startIndex + find_len);
    			count++;
    		}
    		
    		System.out.println(count);
    文字列全体からsearch()メソッドでsbfindが含まれているかどうかを確認します.
    indexOf(find)を使用してsbと同じ文字を検索すると、index値が返され、開始インデックスstartIndexからfindの文字列長を使用してdelete操作が行われます.

    コード#コード#

    import java.io.*;
    
    public class Main {
    	static 	StringBuilder sb = new StringBuilder();
    
    	public static void main(String[] args) throws Exception {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		sb.append(br.readLine());
    		String find = br.readLine();
    
    		search(find);
    
    	} // End of main
    
    	static void search(String find) {
    
    		int count = 0;
    		int startIndex = 0;
    		int find_len = find.length();
    
    		while((startIndex = sb.toString().indexOf(find)) != -1) {
    			sb.delete(0, startIndex + find_len);
    			count++;
    		}
    
    		System.out.println(count);
    	}
    } // End of class