[BaekJoon]141プレフィックス


1.  質問リンク


https://www.acmicpc.net/problem/1141

2.  質問する



サマリ

  • 接頭辞Xセットは、1つのセットのいずれの語も別の語の接頭辞ではない.
  • n個の
  • 語からなる集合から接頭辞Xセットが作成されると、接頭辞Xセットの問題が最大出力される.
  • 入力
  • :1行目の単語数はN、2行目からの単語数はN.
  • 出力:プレフィックスXセットの最大サイズを出力します.
  • 3.  ソースコード

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.ArrayList;
    
    public class Main {
    	public int getPrefixSet(ArrayList<String> words) {
    		for(int i = 0; i < words.size(); i++) {
    			for(int j = 0; j < words.size(); j++) {
    				if(i == j) {
    					continue;
    				}
    				if(words.get(i).length() > words.get(j).length()) {
    					if(words.get(i).indexOf(words.get(j)) == 0) {
    						words.remove(j);
    						if(i > j) {
    							i--;
    							j--;
    						} else {
    							j--;
    						}
    					}
    				} else {
    					if(words.get(j).indexOf(words.get(i)) == 0) {
    						words.remove(i);
    						i--;
    						break;
    					}
    				}
    			}
    		}
    		return words.size();
    	}
    	
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    		int num = Integer.parseInt(br.readLine());
    		ArrayList<String> words = new ArrayList<String>();
    		for(int i = 0; i < num; i++) {
    			words.add(br.readLine());
    		}
            br.close();
    		Main m = new Main();
            bw.write(m.getPrefixSet(words) + "\n");
    		bw.flush();
            bw.close();
    	}
    }

    4.  に近づく

  • 個の所与の単語の集合で、最初の単語から最後の単語までの接頭辞が他の単語の接頭辞であるかどうかを決定し、これらの接頭辞を削除すると、残りの単語の数が接頭辞X集合の最大値となる.
  • すべての
  • をチェックするには、最初の単語から最後の単語までが単語全体の接頭辞であることを確認します.
  • 単語長の長い単語のうち、長さの短い単語を接頭辞として確保する必要があるため、現在チェックする単語長の長い単語と、チェックする単語長の長い単語に分けられる.
  • 現在チェックする単語の長さが長い場合、その単語が接頭辞になっている場合は、チェックする単語をコレクションから削除し、チェックする単語の長さが長い場合は、チェックする単語をコレクションから削除します.
  • 最初の単語から最後の単語まで、上記の方法で接頭辞を削除し、残りの単語の数を出力します.