给定一个字符串,我需要打印出字符串的所有排列。我该怎么办?我试过了
for(int i = 0; i<word.length();i++)
{
for(int j='a';j<='z';j++){
word = word.charAt(i)+""+(char)j;
System.out.println(word);
}
}
这样做有好办法吗?
答案 0 :(得分:1)
我不是百分百肯定我明白你要做什么。我将按照您对问题的原始措辞以及您对@ ErstwhileIII的回答的评论,这让我觉得这不是您正在寻找的真正的“排列”(即重新排列单词中的字母),而是可能的单字母修改(不确定这个更好的词是什么),如下所示:
单词“hello”并打印一个所有“版本”的列表,你可以通过添加一个“拼写错误”来获取它:
你好 - &gt; aello,bello,cello,...,zello,hallo,hbllo,hcllo,...,hzllo,healo,heblo,...
如果这确实是您正在寻找的,以下代码将非常有效地为您做到这一点:
public void process(String word) {
// Convert word to array of letters
char[] letters = word.toCharArray();
// Run through all positions in the word
for (int pos=0; pos<letters.length; pos++) {
// Run through all letters for the current position
for (char letter='a'; letter<='z'; letter++) {
// Replace the letter
letters[pos] = letter;
// Re-create a string and print it out
System.out.println(new String(letters));
}
// Set the current letter back to what it was
letters[pos] = word.charAt(pos);
}
}
答案 1 :(得分:0)
OH ..打印出字符串的所有排列,首先考虑您的算法。 &#34;所有排列&#34;的定义是什么? ..例如:
反思您将使用的算法(用英语写下来)..然后转换为Java代码
虽然不是最有效的,但递归解决方案可能最容易使用(即对于长度为n的字符串,遍历每个字符,然后使用删除了该字符的字符串的排列来跟随它。)
答案 2 :(得分:0)
编辑:好的......你改变了你的要求。排列是另一个故事。我认为这会有所帮助:Generating all permutations of a given string
不确定你要做什么......示例1是将字母表与另一个字母相邻。例2是打印你给我们的任何东西作为例子。
//Example 1
String word=""; //empty string
for(int i = 65; i<=90;i++){ //65-90 are the Ascii numbers for capital letters
word+=(char)i; //cast int to char
}
System.out.println(word);
//Example 2
String word="";
for (int i=65;i<=90;i++){
word+=(char)i+"rse";
if(i!=90){ //you don't want this at the end of your sentence i suppose :)
word+=", ";
}
}
System.out.println(word);