http://blog.csdn.net/jazywoo123/article/details/8022795 2012.09 题目如下,
给定一个字符串的集合,格式如:
输出
我查了查网上的解法,只看到一个(参见http://blog.csdn.net/lillllllll/article/details/4162605),我有一点新想法,说明如下: 1. 首先得到所有元素的集合(aaa, bbb, ccc, ddd, eee, fff, ggg, hhh),复杂度O(N),N是所有元素的个数; 2. 为所有集合标记一个二进制数,来表示包含哪些集合,得到数组int bina[5]复杂度O(N^2); 如题,{aaa, bbb, ccc} = 1 1 1 0 0 0 0 0, {bbb, ddd} = 0 1 0 1 0 0 0 0,
{eee, fff} = 0 0 0 0 1 1 0 0,
{ggg} = 0 0 0 0 0 0 1 0,
{ddd, hhh} = 0 0 0 1 0 0 0 1, 3. 然后写一个函数,判断int数组中的第一个元素是否与其他元素&操作为空,复杂度为O(M),M是原集合的个数 a. 为空则输出该元素对应的集合,并删除第一个元素,递归调用本方法; b. 不为空则与那个元素做或操作合并,删除那个元素,递归调用本方法; c. 如果只剩下一个元素则输出其对应的字符串; 4. 所有的结合已经得到了。 从上面的复杂度看,应该是比原来网上的方法好一些,欢迎大家踊跃拍砖! |
|