matlab - 从 MATLAB 中的字符数组生成所有可能的子集
问题描述
我需要从 MATLAB 中的字符数组生成所有可能的子集,并减少执行时间。例如:输入='ABCA'; 输出='A','B','C','AB','BC','CA','ABC','BCA','ABCA'
解决方案
您可以使用直接循环找到所有这些子集。我不知道向量化这些是否值得,因为任何向量化都需要大型中间数组。
随机输入 500 个字符,maxLen
在 20 个字符时,我得到了 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'
推荐阅读
- css - 单击其他选项卡时如何使内容向后滑动?
- swift - 无法在 iPad 上对齐 TabBar 项目
- com - 如果我不发布 WICFactory(IWICImagingFactory*),会发生什么?
- view - 我下载了水晶视图报告,但是当我打开 vs 应用时我找不到它?
- flutter - 如何根据系统暗模式或颤动中的onclick事件更改主题模式和主题颜色
- react-native - 尝试在本机反应中使用历史推送时如何修复空白页面
- php - 优化 Laravel 查询 - 从 24 个查询到只有 1 个使用收集方法
- c# - 时间:2019-04-01 标签:c#mongodb database collection find
- graphviz - 带有 Graphviz 的分层状态机
- sql - 在 sql server 中未按预期实现使用 round 函数的截断