0

このコードで、コンマで区切られた文字列に多数の順列 (順序付け) を生成するのに苦労しています...通常の文字列だけを実行し、順列を文字だけで機能させることはできますが、実行するときは少し難しくなりますコンマで区切られた単語で...

プログラムにコンマを認識させるために、StringTokenizer メソッドを使用し、それを arrayList に入れていますが、それは実際に私が得た限りです...ここでも問題は、各単語を並べ替えるのに問題があることです...例を挙げて、この下に投稿し、その下に私のコードを投稿します...皆さんの助けに感謝します! ...そして順列とは、コンマで区切られた単語の順序を意味します

たとえば、BufferedReader で受信する入力が次のようになっているとします。

red,yellow

one,two,three

PrintWriter の出力は次のようになります。

red,yellow

yellow,red



one,two,three

one,three,two

two,one,three

two,three,one

three,one,two

three,two,one

入力には「one,two,three」の後の空白行を含む合計 3 行があり、出力には「yellow,red」の後の空白行 1 行と「three,two,one」の後の空白行 2 行を含む合計 11 行あることに注意してください。 "。テストは自動化され、この形式が必要になるため、正確に正しい形式を取得することが重要です。また、各問題の出力行の順序は重要ではないことに注意してください。これは、出力の最初の 2 行も次のようになる可能性があることを意味します。

yellow,red

red,yellow

ここに私がこれまでに持っているコードがあります...いくつかのものをコメントアウトしたので、それらの部分について心配する必要はありません

import java.io.*;

import java.util.*;

public class Solution

{

 public static void run(BufferedReader in, PrintWriter out)

    throws IOException

{

 String str = new String(in.readLine());

 while(!str.equalsIgnoreCase(""))
 {
 PermutationGenerator generator = new PermutationGenerator(str);
 ArrayList<String> permutations = generator.getPermutations();
 for(String str: permutations)
 {
  out.println(in.readLine());
 }
 out.println();
 out.println();

 }
 out.flush();

}







public class PermutationGenerator
{

 private String word;


public PermutationGenerator(String aWord)
{
 word = aWord;
}



public ArrayList<String> getPermutations()
{
 ArrayList<String> permutations = new ArrayList<String>();
 //if(word.length() == 0)
 //{
  //permutations.add(word);
  //return permutations;

 //}

  StringTokenizer tokenizer = new StringTokenizer(word,",");

     while (tokenizer.hasMoreTokens())
     {
      permutations.add(word);
      tokenizer.nextToken();
     }
 /*     
 for(int i = 0; i < word.length(); i++)
 {
  //String shorterWord = word.substring(0,i) + word.substring(i + 1);
  PermutationGenerator shorterPermutationGenerator = new PermutationGenerator(word);
  ArrayList<String> shorterWordPermutations =     
    shorterPermutationGenerator.getPermutations();

  for(String s: shorterWordPermutations)
  {
   permutations.add(word.readLine(i)+ s);
  }
 }*/
 //return permutations;


 }
}

}
4

2 に答える 2

1

String.split() ( http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String) ) を使用して、個々の配列としての単語。整数 {1..N} のすべての順列を個別に生成できます。ここで、N はワード配列のサイズです。次に、数値順列をインデックスとして使用して単語配列をウォークします。

于 2010-01-18T09:09:32.143 に答える
1
  1. 入力行 (カンマで区切られた文字列の単語) を文字列の配列 ( String[] words) に解析します。
  2. 配列で機能する順列ジェネレーターを使用すると、Google を使用してそのようなジェネレーターを簡単に見つけることができます。Object[]で初期化でき、 のようなメソッドを持つジェネレーターが必要ですObject[] nextPermutation()
  3. それをあなたのソリューションにまとめてください。

PS U は、整数順列ジェネレーターを使用して、0 から までのすべての順列を生成することもでき(words.length - 1)ます。words[]そのような順列ごとに、印刷されるインデックスの配列が得られます。

于 2010-01-18T09:17:32.357 に答える