перестановка (упорядочение) строки слов, но разделенных запятой между - PullRequest
0 голосов
/ 18 января 2010

У меня возникли трудности с созданием этого кода ряда перестановок (упорядочений) для строки, разделенной запятыми ... Я могу сделать обычную строку и перестановки работать только с буквами, но это немного больше сложно делать это со словами, разделенными запятыми ...

Чтобы программа распознала запятые, я использовал метод 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

Обратите внимание, что на входе было всего 3 строки, включая пустую строку после «один, два, три», в то время как на выходе было всего 11 строк, включая одну пустую строку после «желтый, красный» и две пустые строки после «три», два один". Очень важно, чтобы вы получили правильный формат, поскольку тестирование будет автоматизировано и потребует этот формат. Также обратите внимание, что порядок вывода строк для каждой задачи не имеет значения. Это означает, что первые две строки вывода также могли быть:

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;


 }
}

}

Ответы [ 2 ]

1 голос
/ 18 января 2010
  1. Разобрать вашу строку ввода (которая является разделенными запятыми словами String ow) в массив строк (String[] words).
  2. Используйте некоторый генератор перестановок, который работает с массивом, вы можете легко найти такой генератор с помощью Google. Вы хотите генератор, который можно инициализировать с помощью Object[], и имеет метод, подобный Object[] nextPermutation().
  3. Соедините это в своем решении.

PS U также может использовать генератор перестановок целых чисел и генерировать все перестановки от 0 до (words.length - 1); каждая такая перестановка даст вам массив индексов words[] для распечатки.

1 голос
/ 18 января 2010

Вы можете использовать String.split () (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String)), чтобы получить отдельные слова в виде массива. Вы можете отдельно генерировать все перестановки целых чисел {1..N}, где N - размер массива слов. Затем просто пройдитесь по массиву слов, используя числовые перестановки в качестве индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...