keywords: [Algorithms]算法题:多个字母任意组合多个新字符串

题目:
比如一串字符,string s = “abcd”,假设里面的每个字符都不重复,求出这些字符任意组合后,形成的所有的新字符串。忽略掉顺序,比如ac和ca是同一种。 例子:
abc的3个字符可以组合的情况为: a b c ab bc ac abc

代码:

#include <iostream>
#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::string s("abcd");

    std::vector<std::string> vec;
    for (size_t i = 0; i < s.length(); i++)
    {
        std::string s1(1, s.at(i));
        vec.push_back(s1);
        for (size_t j = i + 1; j < s.length(); j++)
        {
            for (size_t k = 0; k < s.length() - j; k++)
            {
                std::string s2 = s.substr(j, k + 1);
                std::string new_str = s1 + s2;
                vec.push_back(new_str);
            }
        }
    }

    for (std::string& str : vec)
    {
        std::cout << str << std::endl;
    }

    system("pause");
}

输出结果:

a
ab
abc
abcd
ac
acd
ad
b
bc
bcd
bd
c
cd
d

真正的男人,不会为英雄的荣誉去死,而要为心爱的人活着。──藤泽周平《黄昏清兵卫》