我有一些困难,让这段代码在用逗号分隔的字符串上生成许多排列(排序)...我只能做一个常规字符串,并且排列只对字母起作用,但它更多一些用逗号分隔的单词做起来很困难......
让程序识别逗号我使用了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;
}
}
}
答案 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)
String[] words
)。Object[]
初始化的生成器,并且有一个类似Object[] nextPermutation()
的方法。 PS U还可以使用整数置换生成器并生成从0到(words.length - 1)
的所有排列;每个这样的排列将为您提供一系列要打印出来的words[]
索引。