Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Missing Permutations in a list

  • Difficulty Level : Medium
  • Last Updated : 07 Dec, 2018

Given a list of permutations of any word. Find the missing permutation from the list of permutations.

Examples:

Input : Permutation_given[] = {"ABCD", "CABD", "ACDB", 
              "DACB", "BCDA", "ACBD", "ADCB", "CDAB",
              "DABC", "BCAD", "CADB", "CDBA", "CBAD", 
              "ABDC", "ADBC", "BDCA", "DCBA", "BACD",
              "BADC", "BDAC", "CBDA", "DCAB"};
Output : DBAC DBCA

1) We create a set of all given strings.
2) And one more set of all permutations.
3) Finally return difference between two sets.




#include <bits/stdc++.h>
using namespace std;
  
void find_missing_strings(string Permutation_given[], size_t Size_Permutation_given)
{
    // vector "permutation" containing all
    // the permutation of input string
    vector<string> permutations;
  
    // Here we can take any string
    // from the given list and do
    // the necessary permutation
    string input = Permutation_given[0];
    permutations.push_back(input);
  
    // In the loop we will store
    // all the permutations of the string
    // in the vector "permutation".
    while (true) {
  
        string p = permutations.back();
  
        // Getting next permutation of input string
        next_permutation(p.begin(), p.end());
        if (p == permutations.front())
            break;
  
        permutations.push_back(p);
    }
  
    // vector containing all the
    // missing strings in permutation
    vector<string> missing;
  
    // given_permutations contains the
    // permutation of the input string
    set<string> given_permutations(Permutation_given, 
         Permutation_given + Size_Permutation_given);
  
    // Through the set difference we will get 
    // the missing words in vector missing
    set_difference(permutations.begin(), permutations.end(),
                                 given_permutations.begin(),
                                 given_permutations.end(), 
                                  back_inserter(missing));
  
    // printing all the missing string
    for (auto i = missing.begin(); i != missing.end(); ++i)
        cout << *i << endl;
}
  
// Driver code
int main()
{
    string Permutation_given[] = {
        "ABCD", "CABD", "ACDB", "DACB",
        "BCDA", "ACBD", "ADCB", "CDAB",
        "DABC", "BCAD", "CADB", "CDBA",
        "CBAD", "ABDC", "ADBC", "BDCA",
        "DCBA", "BACD", "BADC", "BDAC",
        "CBDA", "DCAB"
    };
  
    // size of permutation list
    size_t Size_Permutation_given = 
                 sizeof(Permutation_given) / 
                 sizeof(*Permutation_given);
  
    find_missing_strings(Permutation_given, 
                    Size_Permutation_given);
  
    return 0;
}

Output:

DBAC
DBCA


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!