Before I begin, I have to apologize for creating another case of duplicate permutations. I went through most of the search results and cannot find what I am looking for. I read about the lexicographic order and implemented it. For this question, I suppose to implement a recursion method that prints all lines of length n, consisting only of characters a and b, which have equal numbers a and bs. Lines should be printed one line at a time in lexical order. So, for example, a call:
printBalanced(4);
print lines:
aabb
abab
abba
baab
baba
bbaa
here is the code
public static void main(String[] args){
printBalanced(4);
}
public static void printBalanced(int n){
String letters = "";
for(int i =0; i<n/2;i++){
letters += "ab";
}
balanced("",letters);
}
private static void balanced(String prefix, String s){
int len = s.length();
if (len ==0){
System.out.println(prefix);
}
else{
for(int i = 0; i<len; i++){
balanced(prefix + s.charAt(i),s.substring(0,i)+s.substring(i+1,len));
}
}
}
My print results:
abab
abba
aabb
aabb
abba
abab
baab
baba
baab
baba
bbaa
bbaa
aabb
aabb
abab
abba
abab
abba
baba
baab
bbaa
bbaa
baab
baba
, . "a" "b". , "abcd" "0123". arraylist , N , , . . - ? =)
SortedSet:
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;
public class BalancedStrings {
public static void main(String[] args){
printBalanced(4);
}
public static void printBalanced(int n){
String letters = "";
for(int i =0; i<n/2;i++){
letters += "ab";
}
SortedSet<String> results = balanced("",letters);
Iterator<String> it = results.iterator();
while (it.hasNext()) {
Object element = it.next();
System.out.println(element);
}
}
private static SortedSet<String> balanced(String prefix, String s){
SortedSet<String> set = new TreeSet<String>();
int len = s.length();
if (len == 0){
set.add(prefix);
return set;
}
else{
SortedSet<String> rest = new TreeSet<String>();
for(int i = 0; i<len; i++){
rest = balanced(prefix + s.charAt(i),s.substring(0,i)+s.substring(i+1,len));
set.addAll(rest);
}
return set;
}
}
}