在java中查找字符串的所有排列

问题描述

在这篇文章中,我们将看到如何在 java 中找到 String 的所有排列。 我们将使用一种非常简单的方法来做到这一点。 取出String的第一个字符,递归地插入剩余String的排列的不同位置。

假设您将 String 作为ABC。 所以我们从 ABC 中取出 A 第一个字符 =A 和 RemainingString = BC 因为我们在这里应用递归,我们将找到 BC 的排列。 从 BC 中取出 B。 第一个字符= B 和 RemainingString = C 因为我们在这里应用递归,我们会找到 C 的排列。 当我们取出 C 时,我们的字符串大小变为 0,这就是我们这里的基本情况。 第一个字符 = C 和 RemainingString = “” 我们将 C 插入到 RemainingString(“”) 的排列的不同索引中,所以我们得到 C 的排列为 C。 我们将 B 插入到剩余字符串(C)的排列的不同索引中,所以我们得到BC 和 CB。 C: BC, CB 现在我们将 A 插入到 BC 和 CB 的不同索引中。 BC : ABC , BAC , BCA CB : ACB, CAB, CBA 所以这就是我们如何得到 ABC 的所有排列。 这可能看起来很棘手,但是一旦您练习了该解决方案,您将能够更好地理解它。

在java中查找所有字符串排列的Java程序:

package org.arpit.java2blog;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class PermutationOfStringJava {

 public static void main(String[] args) {

     Set set=permutationOfString("ABC");
     System.out.println("Permutations of String ABC are:");
     for (Iterator iterator = set.iterator(); iterator.hasNext();) {
   String string = (String) iterator.next();
   System.out.println(string);   
  }
 }

 public static Set permutationOfString(String str)
 {
  Set permutationSet=new HashSet();

  if(str.length()==0)
  {
   permutationSet.add("");
            return permutationSet;
  }

  // take out first character of String
  char c=str.charAt(0);
  // Remaining String
  String rem=str.substring(1);

  Set permutatedSetForRemainingString=permutationOfString(rem);
  for (String permutedString: permutatedSetForRemainingString) {
   for (int j = 0; j <= permutedString.length(); j++) {
    String permutation=insertFirstCharAtDiffPlaces(permutedString,c,j);
    permutationSet.add(permutation);
   }

  }
  return permutationSet;

 }
 public static String insertFirstCharAtDiffPlaces(String perm,char firstChar,int index)
 {
  // Inserting firstCharacter of orig String at difference places based on index
  return perm.substring(0,index)+firstChar+perm.substring(index);
 }

}

当你运行上面的程序时,你会得到以下信息:

Permutations of String ABC are:
ACB
ABC
BCA
CBA
CAB
BAC

解决方法

在java中查找字符串的所有排列

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...