检查字符串是否在Octave中包含三个相同的字母

时间:2016-04-17 01:51:09

标签: string matlab octave

我试图在Octave中创建一个函数来检查一个字符串是否包含三个连续的相同字符。也就是说,如果我的字符串为"asdf",则应返回0,如果它与"asdfffg"类似,则应返回1.我到目前为止所做的是

if(length(findstr(word,"aaa",0)) > 1 || length(findstr(word,"bbb",0)) > 1 ||   ..

成本高昂,而且我认为效率不高。有什么建议吗?

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}}出现在输出中。