一串单词的排列(排序),但两者之间用逗号分隔

时间:2010-01-18 08:58:45

标签: java permutation

我有一些困难,让这段代码在用逗号分隔的字符串上生成许多排列(排序)...我只能做一个常规字符串,并且排列只对字母起作用,但它更多一些用逗号分隔的单词做起来很困难......

让程序识别逗号我使用了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 个答案:

答案 0 :(得分:1)

您可以使用String.split()(http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String))将单个单词作为数组获取。您可以单独生成整数{1..N}上的所有排列,其中N是单词数组的大小。然后使用数字排列作为索引来遍历单词数组。

答案 1 :(得分:1)

  1. 将输入行(这是逗号分隔的String ow单词)解析为字符串数组(String[] words)。
  2. 使用一些在阵列上工作的置换生成器,您可以使用谷歌轻松找到这样的生成器。你想要一个可以用Object[]初始化的生成器,并且有一个类似Object[] nextPermutation()的方法。
  3. 将它们整合到您的解决方案中。
  4. PS U还可以使用整数置换生成器并生成从0到(words.length - 1)的所有排列;每个这样的排列将为您提供一系列要打印出来的words[]索引。