My solution in Java. Permutation first then search
public class FindInDictionary {
private static int numOfPerm;
private static int index;
private static String [] allPerms;
private static void swap (char[] a, int i, int j){
char c = a[i]; a[i]=a[j]; a[j]=c;
}
//recursive way of creating permutation
private static void permutation (char[] a, int n)
{
if (n==1)
{
// System.out.println(String.valueOf(a));
allPerms [index]=String.valueOf(a);
index ++;
return;
}
for (int i=0;iswap (a,i,n-1);
permutation (a,n-1);
swap (a,i,n-1);
}
}
private static int factorial (int n){
int fact = 1;
for (int i=1;i<=n;i++){
fact *= i;
}
return fact;
}
public static void perm (String s){
if (s==null)
return;
else
{
int n = s.length();
int index = 0;
numOfPerm = factorial(n);
allPerms = new String [numOfPerm];
index = 0;
char[] array = s.toCharArray();
permulation (array,n);
}
}
public static void main(String[] args) {
String [] dict = {"hello", "world", "pot", "opt"};
String target = "pto";
perm (target);
for (String targetStr : allPerms)
{
for (String dictStr : dict)
{
if (targetStr.equals(dictStr) )
System.out.println("match found in dictionary: "+dictStr
);
}
}
}
}