当前位置: 首页 > 面试题库 >

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

巫马俊力
2023-03-14
问题内容

在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字符串中所有出现的子字符串。 例如:在“ ababsdfasdfhelloasdf”中搜索“ asdf”将返回[8,17],因为有2个“ asdf”,一个在位置8,另一个在17。在“ aaaaaa”中搜索“ aa”将返回[0, 1,2,3,4],因为位置0、1、2、3和4处有一个“ aa”。 我尝试了这个: 可以在Python中解决此问题,如下所示: 其中“ wo

  • 问题内容: 因此,我试图在用户输入的字符串中查找所有大写字母,但始终出现此运行时错误: 我觉得很愚蠢,但我无法弄清楚,Oracle甚至在有关java.lang.StringIndexOutOfBoundsException的页面上谈论了charAt。 这是我的代码,用于查找大写字母并打印它们: 我非常感谢您的任何投入和/或帮助。 问题答案: 应该 请记住,数组索引从零开始。 字符串长度返回 字符串

  • 问题内容: 我有绳子。我想通过更改字符串中的字符顺序来从该字符串生成所有排列。例如,说: 我想要的是这样的清单, 目前,我正在迭代字符串的列表强制转换,随机选择2个字母并将它们换位以形成新的字符串,然后将其添加到设置的l强制转换中。根据字符串的长度,我正在计算可能的排列数量,并继续迭代直到集合大小达到极限。必须有更好的方法来做到这一点。 问题答案: itertools模块具有一个有用的方法,称为p

  • 本文向大家介绍在C ++中查找所有好的字符串,包括了在C ++中查找所有好的字符串的使用技巧和注意事项,需要的朋友参考一下 假设我们有两个字符串s1和s2。这些字符串的大小为n,我们还有另一个字符串称为evil。我们必须找到好字符串的数量。 如果字符串的大小为n,则按字母顺序大于或等于s1,按字母顺序小于或等于s2,并且作为子字符串不包含邪恶,则该字符串称为良。答案可能非常大,因此请以10 ^ 9

  • 问题内容: 我正在尝试查找“ |”的所有出现 在一个字符串中。 但我得到一个错误: 问题答案: 功能: 将返回的索引列表中的出现。

  • 本文向大家介绍C#查找字符串所有排列组合的方法,包括了C#查找字符串所有排列组合的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#查找字符串所有排列组合的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。