Algorithm to print all combination of letters of the given string in lexicographical order

后端 未结 2 979
心在旅途
心在旅途 2021-01-15 19:17

I tried to create the code to generate all possible combination of the given string in the lexicographical order:

The code that I wrote is:

void get(         


        
相关标签:
2条回答
  • 2021-01-15 19:50

    Following may help:

    bool increase(std::vector<bool>& bs)
    {
        for (std::size_t i = 0; i != bs.size(); ++i) {
            bs[i] = !bs[i];
            if (bs[i] == true) {
                return true;
            }
        }
        return false; // overflow
    }
    
    template <typename T>
    void PowerSet(const std::vector<T>& v)
    {
        std::vector<bool> bitset(v.size());
    
        do {
            for (std::size_t i = 0; i != v.size(); ++i) {
                if (bitset[i]) {
                    std::cout << v[i] << " ";
                }
            }
            std::cout << std::endl;
        } while (increase(bitset));
    }
    

    Live example

    0 讨论(0)
  • 2021-01-15 20:06

    This is a simple recursive approach:

    #include <string>
    #include <iostream>
    using namespace std;
    
    void get( string str, string res ) {
    
       cout << res << endl;
    
       for( int i = 0; i < str.length(); i++ )
          get( string(str).erase(i,1), res + str[i] );
    }
    
    int main( int argc, char **argv) {
    
       string str = "abcde";
       get( str, "" );  
       return 0;
    }
    

    Maybe not the most efficient way of doing it, but a short and simple one. Keep in mind, that enumerating all combinations has a complexity of O(2n) anyway. So there exists no efficient algorithm at all.

    0 讨论(0)
提交回复
热议问题