Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输入:一个单词';这是一根绳子。打印给定字符串的所有重新排列,无需重复。JAVA_Java_Anagram - Fatal编程技术网

输入:一个单词';这是一根绳子。打印给定字符串的所有重新排列,无需重复。JAVA

输入:一个单词';这是一根绳子。打印给定字符串的所有重新排列,无需重复。JAVA,java,anagram,Java,Anagram,我试图用Java实现这一点,但我不知道如何实现。有什么建议吗 例子 输入: abc 输出: abc acb bac bca 驾驶室 cba 输入: aab 输出: aab aba 这是我能想到的最简单的方法 String str= "abc"; ArrayList<String> letters = new ArrayList<String>(); HashSet<String> combinations =

我试图用Java实现这一点,但我不知道如何实现。有什么建议吗

例子

输入:

abc

输出:

abc
acb
bac
bca
驾驶室
cba

输入:

aab

输出:

aab
aba

这是我能想到的最简单的方法

 String str= "abc";
            ArrayList<String> letters = new ArrayList<String>();
            HashSet<String> combinations = new HashSet<String>();
            for(int i = 0; i<str.length();i++) {
//Break String into letters
                letters.add(str.substring(i,i+1));
            }
            for(int i = (str.length()*2)+1;i>0;i--) {
//Will loop through maximum possible outcomes
                String result = "";
                String bin = Integer.toBinaryString(i);
//System.out.println(bin);
                while(bin.length()<3) {
                    bin="0"+bin;
                }
                for(int b = bin.length();b>0;b--) {
                    if(bin.substring(b-1,b).equals("1"))result = result.concat(letters.get(b-1));
                }
                for(int b = bin.length();b>0;b--) {
                    if(bin.substring(b-1,b).equals("0"))result = result.concat(letters.get(b-1));
                }
                combinations.add(result);
            }
            System.out.println(str);
            for(String c : combinations) {
                System.out.println(c);
            }
String str=“abc”;
ArrayList字母=新的ArrayList();
HashSet组合=新的HashSet();
对于(int i=0;i0;i--){
//将循环通过最大可能的结果
字符串结果=”;
String bin=Integer.toBinaryString(i);
//系统输出打印项次(bin);
而(bin.length()0;b--){
if(bin.substring(b-1,b.)等于(“1”))result=result.concat(letters.get(b-1));
}
对于(int b=bin.length();b>0;b--){
if(bin.substring(b-1,b.)等于(“0”))result=result.concat(letters.get(b-1));
}
组合。添加(结果);
}
系统输出打印项次(str);
用于(字符串c:组合){
系统输出打印ln(c);
}

它使用二进制在原始字符串的数组中循环,然后将结果添加到哈希集中,以删除重复项

欢迎使用StackOverflow。请告诉我们到目前为止您尝试了什么,以及您发现了哪些方面的问题?对于初学者:可能重复的我不知道如何将我的想法放入编程语言中。我需要学习ArrayList和HashSet。我从来没有听说过。@Fredgrub它们对于存储和访问多个变量很有用。如果您有兴趣了解更多,JavaDocs和GoalKicker中有一些很棒的资源