我有一个字符串和一个字符串元胞数组。
str = 'actaz';
dic = {'aaccttzz', 'ac', 'zt', 'ctu', 'bdu', 'zac', 'zaz', 'aac'};
我想获得:
idx = [2, 3, 6, 8];
我写了一段很长的代码:
- 查找长度不大于length(str)的元素;
- 删除str中不包含字符的元素;
- 最后,对于每个剩余元素,一一检查字符
本质上,这是一个近乎暴力的代码,并且运行速度非常慢。我想知道是否有一种简单的方法可以快速完成。
注意:我刚刚编辑了这个问题,以明确如果字符在 str 中出现 n 次,则它们可以重复 n 次。感谢 Shai 指出。
最佳答案
您可以对字符串进行排序,然后使用正则表达式进行匹配。对于您的示例,模式将为 ^a{0,2}c{0,1}t{0,1}z{0,1}$
:
u = unique(str);
t = ['^' sprintf('%c{0,%d}', [u; histc(str,u)]) '$'];
s = cellfun(@sort, dic, 'uni', 0);
idx = find(~cellfun('isempty', regexp(s, t)));
关于string - MATLAB。查找字符串元胞数组的索引,其中所有字符都包含在给定字符串中(不重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19343339/