我有一个字符串和一个字符串数组。
str = 'actaz';
dic = {'aaccttzz', 'ac', 'zt', 'ctu', 'bdu', 'zac', 'zaz', 'aac'};
我想获得:
idx = [2, 3, 6, 8];
我写了一段非常长的代码:
基本上,它是一个几乎强力的代码,运行速度非常慢。我想知道是否有一种简单的方法可以快速完成。
注意:我刚刚编辑了这个问题,以明确如果字符在str中出现n次,则可以重复n次。谢谢Shai指出来。
答案 0 :(得分:1)
我想出了这个:
>> g=@(x,y) sum(x==y) <= sum(str==y);
>> h=@(t)sum(arrayfun(@(x)g(t,x),t))==length(t);
>> f=cellfun(@(x)h(x),dic);
>> find(f)
ans =
2 3 6
str
中的计数数量。dic
答案 1 :(得分:1)
您可以对字符串进行排序,然后使用正则表达式匹配它们。对于您的示例,模式将为^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)));