如何在Java中打印出字符串的所有排列

时间:2014-03-16 23:15:57

标签: java

给定一个字符串,我需要打印出字符串的所有排列。我该怎么办?我试过了

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);   
        }
    }

这样做有好办法吗?

3 个答案:

答案 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;的定义是什么? ..例如:

  1. String&#34; a&#34;会回答一个
  2. String&#34; ab&#34;会有答案:ab,ba
  3. String&#34; abc&#34;会有答案:abc acb,bca,bac,cba,cab
  4. 反思您将使用的算法(用英语写下来)..然后转换为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);