我试图在Octave中创建一个函数来检查一个字符串是否包含三个连续的相同字符。也就是说,如果我的字符串为"asdf"
,则应返回0
,如果它与"asdfffg"
类似,则应返回1.我到目前为止所做的是
if(length(findstr(word,"aaa",0)) > 1 || length(findstr(word,"bbb",0)) > 1 || ..
成本高昂,而且我认为效率不高。有什么建议吗?
答案 0 :(得分:3)
使用正则表达式:
match = regexp(word, '(.)\1{2}', 'once');
这意味着:匹配任何字符((.)
),然后匹配相同的字符(\1
)两次({2}
)。它将返回第一个匹配的起始索引,如果没有匹配则返回一个空数组。所以你想要的结果将是
result = ~isempty(match);
另一种可能性是使用卷积:
result = any(conv([1 1], +~diff(word))==2);
此操作如下:当diff
两个连续字符相同时,0
将给出diff
。因此,您要检测~
的输出是否包含两个连续的零。这是通过否定(double
),转换为+
([1 1]
),与序列conv([1 1], ...)
(2
)进行卷积,并查看是否{{}来完成的1}}出现在输出中。