string - 较长字符串中最长重复字符串的长度

标签 string matlab substring

我正在处理一系列具有不同长度的长字符串(例如,'ABAABBFGGBHHSFAFDAFDAFDBB')。对于每个字符串,我想找到特定子字符串的最长连续出现的长度(例如 'AFD',上面示例中的答案是 3)。使用 MATLAB 实现此目的的任何优雅方法?

最佳答案

让输入和搜索字符串为 -

in_str = 'ABAAAFDAFDBBFGGBHHSFAFDAFDAFDBB'
search_str = 'AFD'

我们可以使用strfind获取输入字符串中搜索字符串的起始索引,并从中检测连续的搜索字符串组 -

idx = strfind(in_str,search_str)
grp_matches = diff(idx)==numel(search_str)

因此,现在我们有了零和一的“岛”,其中一的岛代表连续分组搜索字符串的存在。接下来,我们需要找到岛的长度,最大岛长度将是所需的输出 -

df1 = diff([0 grp_matches 0]) %// Perform differentiation of matches

岛屿的终点在微分结果中用“-1”表示,“1”表示这些岛屿的起点。所以,(find(df1==-1) - find(df1==1))+1 就是岛的长度。最终输出将是它的 max -

out = max(find(df1==-1) - find(df1==1))+1 

总结讨论,整个代码可以像这样制作成紧凑版本 -

df1 = diff([0 diff(strfind(in_str,search_str))==numel(search_str) 0])
out = max(find(df1==-1) - find(df1==1))+1 

关于string - 较长字符串中最长重复字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30618078/

相关文章:

mysql - 链接表和 substring_index 的命名约定

C Fread 将文本文件拆分为 block

c# - 多个级别的特殊字符串模式的正则表达式

algorithm - 使用 0 和 1 给定旋转角度绘制一个正方形

matlab - 旋转的 polyshape 对象的宽度和高度 - Matlab

bash - sed 从固定位置复制子串并复制到行前

java - 如何从标题为全名缩写的列表生成 .txt 文件

python - 检查组合字符串中子字符串顺序的算法

MATLAB:平均时间序列数据没有循环?

sql - 选择子字符串 SQL