从MATLAB中的字符数组生成所有可能的子集

时间:2019-03-30 05:13:33

标签: matlab

我需要从MATLAB中的字符数组生成所有可能的子集,以减少执行时间。 例如: 输入='ABCA'; 输出='A', 'B', 'C', 'AB', '公元前', 'CA', “ ABC”, 'BCA', “ ABCA”

1 个答案:

答案 0 :(得分:1)

您可以使用直接循环找到所有这些子集。我不知道这些向量化是否值得,因为任何向量化都需要大的中间数组。

随机输入500个字符,并在20时输入maxLen,我得到了4207817个唯一的子字符串。我的计算机(使用MATLAB R2017a)花了12秒钟才找到它们。是否足够快取决于您,但是我不会为进一步优化而烦恼。

input = 'ABCA';
maxLen = 4;

subsets = {};
for len = 1:maxLen
   subs = cell(1,numel(input)-len+1);
   for start = 1:numel(subs)
      subs{start} = input(start:start+len-1);
   end
   subs = unique(subs);
   subsets = [subsets,subs];
end
disp(subsets)

输出:

'A'    'B'    'C'    'AB'    'BC'    'CA'    'ABC'    'BCA'    'ABCA'

如果保留子串的顺序很重要,则将'stable'参数添加到unique调用中:

   subs = unique(subs,'stable');

例如,对于input = 'AFCB';,不包含'stable'的输出为:

'A'    'B'    'C'    'F'    'AF'    'CB'    'FC'    'AFC'    'FCB'    'AFCB'

'stable'是:

'A'    'F'    'C'    'B'    'AF'    'FC'    'CB'    'AFC'    'FCB'    'AFCB'