string - MATLAB。查找字符串元胞数组的索引,其中所有字符都包含在给定字符串中(不重复)

标签 string matlab find character cell-array

我有一个字符串和一个字符串元胞数组。

str = 'actaz';
dic = {'aaccttzz', 'ac', 'zt', 'ctu', 'bdu', 'zac', 'zaz', 'aac'};

我想获得:

idx = [2, 3, 6, 8];

我写了一段很长的代码:

  1. 查找长度不大于length(str)的元素;
  2. 删除str中不包含字符的元素;
  3. 最后,对于每个剩余元素,一一检查字符

本质上,这是一个近乎暴力的代码,并且运行速度非常慢。我想知道是否有一种简单的方法可以快速完成。

注意:我刚刚编辑了这个问题,以明确如果字符在 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/

相关文章:

python - 统计word中大写和小写字符的个数

matlab - 颜色条高度太大并且重叠图形标题

matlab - 无法在条形图上应用颜色图

javascript - 如何安全地用替换术语替换每个搜索,其中前者是后者的一部分,而不会再次替换这样的搜索?

java - 如何在上一个之后返回下一个 indexOf?

matlab - 读取 DICOM-RT 文件以创建 3D 二进制矩阵?

bash - 如何进入每个目录并执行命令?

linux - Bash 脚本操作

php - 查找字符串超过 50 个字符的 php 文件

python - 将现有大写字母保留在字符串中