算法13------集合所有的子集或者字符串所有子串
Posted 咫片炫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法13------集合所有的子集或者字符串所有子串相关的知识,希望对你有一定的参考价值。
1、题目:
给定字符串s=‘abc\',所有子集:\'a\',\'b\',\'c\',\'ab\',\'ac\',\'bc\',\'abc\'。
所有子串:’a\',\'b\',\'c\',\'ab\',\'bc\',\'abc\'
2、所有子集代码:
(1)位运算:(输入s为字符串)(输出subStr为迭代器,子集列表)
def SubSet(s): N = len(s) for i in range(2**N): subStr = [] for j in range(N): if(i >> j ) % 2 == 1: subStr.append(s[j]) yield subStr
(2)回溯法:
def subSet(nums): if not nums: return [] res = [] def helper(index , tmp , m): res.append(tmp) for i in range(index , m): helper(i+1,tmp + [nums[i]],m) helper(0,[],len(nums)) return res if __name__==\'__main__\': nums = [\'a\',\'b\',\'c\'] print(subSet(nums))
(3)Python的extend功能
def subSet(nums): result = [[]] for x in nums: result.extend([subset + [x] for subset in result]) return result
3、所有子串代码:s为字符串,ss为子串列表
ss=[s[i:i + x + 1] for x in range(len(s)) for i in range(len(s) - x)]
以上是关于算法13------集合所有的子集或者字符串所有子串的主要内容,如果未能解决你的问题,请参考以下文章