algorithm - 从给定字符串打印按字典顺序排序的子集

标签 algorithm sorting combinatorics

例如 - 如果字符串是“abc”,答案应该是 a ab abc ac b bc c(只应出现一组字符中按字典顺序排列的最小组合) 我已经解决了这个问题,但是对于包含 15 个或更多字符的字符串,它会花费很多时间。如何减少算法的运行时间? 这里,n 是字符串的长度。 这是我的代码:

            int n = int.Parse(Console.ReadLine());
            var str = Console.ReadLine();
            string coll = string.Empty;
            coll = coll + " " + str[0];
            for (int j = 1; j < n; j++)
            {
                var items = coll.Split(' ');
                foreach (var item in items)
                {
                    coll = coll + " " + item+str[j];
                }
            }
            var tt = coll.Split(' ').OrderBy(a => a);
            foreach (var item in tt)
                if (!string.IsNullOrEmpty(item))
                    Console.WriteLine(item);

最佳答案

对于长度为 n 的字符串,有 2^n 个可能的子集。如果需要打印每个子集,您将无法避免指数级的复杂性。

关于algorithm - 从给定字符串打印按字典顺序排序的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29317516/

相关文章:

algorithm - 计算组合的等级?

arrays - 如何在 Swift 中生成给定大小的 1 位和 0 位的所有排列

python - 如何生成最大步长为 1 的所有非递减序列?

java - 合并重叠的日期范围 - Java

javascript - 最小距离哈密顿路径 Javascript

java - android 根据obj数据对ArrayList进行排序

sorting - 按值对哈希进行排序

java - 我如何编写大量的 for 循环

c# - 如何修复代码以便 C# 中的斐波那契搜索算法正常​​工作

perl - 你如何在 Perl 中对并行数组进行排序?