import java.util.SortedSet ;
import java.util.TreeSet ;
import java.util.Scanner ;
import java.util.Arrays ;
/**
*
* @author Ashu
* Recursive method to find all permutations of a String without any duplicates
* (if exists).
*/
public final class PermutationRecursive
{
{
int length = endStr.length ( ) ;
if ( length == 1 ) set.add ( begStr + endStr) ;
else
{
for ( int i = 0 ; i < length ; i++ )
{
String newStr
= endStr.
substring ( 0 , i
) + endStr.
substring ( i
+ 1 ) ; permuteString( begStr + endStr.charAt ( i) , newStr) ;
}
}
}
{
int k = 0 ;
{
System .
out .
println ( ++ k
+ " --> " + str
) ; }
System .
out .
println ( "Frequency of Permutations : " + k
) ; }
{
int loc
= Arrays .
binarySearch ( list.
toArray ( ) , sch
) + 1 ; System .
out .
println ( "String Found At :: " + loc
) ; }
public static void main
( String [ ] args
) {
PermutationRecursive pR = new PermutationRecursive( ) ;
Scanner scan
= new Scanner
( System .
in ) ;
System .
out .
print ( "Enter a String :: " ) ; String str
= scan.
nextLine ( ) ;
pR.permuteString ( "" , str) ;
pR.print ( pR.set ) ;
System .
out .
print ( "Enter the String to be searched :: " ) ; String input
= scan.
nextLine ( ) ; scan.close ( ) ;
pR.search ( pR.set , input) ;
}
}
aW1wb3J0IGphdmEudXRpbC5Tb3J0ZWRTZXQgOwppbXBvcnQgamF2YS51dGlsLlRyZWVTZXQgOwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXIgOwppbXBvcnQgamF2YS51dGlsLkFycmF5cyA7CgovKioKICoKICogQGF1dGhvciBBc2h1CiAqIFJlY3Vyc2l2ZSBtZXRob2QgdG8gZmluZCBhbGwgcGVybXV0YXRpb25zIG9mIGEgU3RyaW5nIHdpdGhvdXQgYW55IGR1cGxpY2F0ZXMKICogICAoaWYgZXhpc3RzKS4KICovCnB1YmxpYyBmaW5hbCBjbGFzcyBQZXJtdXRhdGlvblJlY3Vyc2l2ZQp7CiAgICBwcml2YXRlIFNvcnRlZFNldCA8U3RyaW5nPiBzZXQgPSBuZXcgVHJlZVNldCA8U3RyaW5nPiAoKSA7CgogICAgcHJpdmF0ZSB2b2lkIHBlcm11dGVTdHJpbmcoU3RyaW5nIGJlZ1N0ciwgU3RyaW5nIGVuZFN0cikKICAgIHsKICAgICAgICBpbnQgbGVuZ3RoID0gZW5kU3RyLmxlbmd0aCgpIDsKICAgICAgICBpZiAobGVuZ3RoID09IDEpIHNldC5hZGQoYmVnU3RyICsgZW5kU3RyKSA7CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbGVuZ3RoIDsgaSsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTdHJpbmcgbmV3U3RyID0gZW5kU3RyLnN1YnN0cmluZygwLCBpKSArIGVuZFN0ci5zdWJzdHJpbmcoaSsxKSA7CiAgICAgICAgICAgICAgICBwZXJtdXRlU3RyaW5nKGJlZ1N0ciArIGVuZFN0ci5jaGFyQXQoaSksIG5ld1N0cikgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgdm9pZCBwcmludChTb3J0ZWRTZXQgPFN0cmluZz4gbGlzdCkKICAgIHsKICAgICAgICBpbnQgayA9IDAgOwogICAgICAgIGZvciAoU3RyaW5nIHN0ciA6IGxpc3QpCiAgICAgICAgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKytrICsgIiAtLT4gIiArIHN0cikgOwogICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZyZXF1ZW5jeSBvZiBQZXJtdXRhdGlvbnMgOiAiICsgaykgOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBzZWFyY2goU29ydGVkU2V0IDxTdHJpbmc+IGxpc3QsIFN0cmluZyBzY2gpCiAgICB7CiAgICAgICAgaW50IGxvYyA9IEFycmF5cy5iaW5hcnlTZWFyY2gobGlzdC50b0FycmF5KCksIHNjaCkgKyAxIDsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0cmluZyBGb3VuZCBBdCA6OiAiICsgbG9jKSA7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICBQZXJtdXRhdGlvblJlY3Vyc2l2ZSBwUiA9IG5ldyBQZXJtdXRhdGlvblJlY3Vyc2l2ZSgpIDsKICAgICAgICBTY2FubmVyIHNjYW4gPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pIDsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRW50ZXIgYSBTdHJpbmcgOjogIikgOwogICAgICAgIFN0cmluZyBzdHIgPSBzY2FuLm5leHRMaW5lKCkgOwoKICAgICAgICBwUi5wZXJtdXRlU3RyaW5nKCIiLCBzdHIpIDsKICAgICAgICBwUi5wcmludChwUi5zZXQpIDsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRW50ZXIgdGhlIFN0cmluZyB0byBiZSBzZWFyY2hlZCA6OiAiKSA7CiAgICAgICAgU3RyaW5nIGlucHV0ID0gc2Nhbi5uZXh0TGluZSgpIDsKICAgICAgICBzY2FuLmNsb3NlKCkgOwogICAgICAgIHBSLnNlYXJjaChwUi5zZXQsIGlucHV0KSA7CiAgICB9Cn0=