我正在尝试在Octave中创建一个函数,以检查字符串是否包含三个连续的相同字符。也就是说,如果我的字符串是"asdf"
它应该返回,0
并且好像"asdfffg"
它应该返回1。
if(length(findstr(word,"aaa",0)) > 1 || length(findstr(word,"bbb",0)) > 1 || ..
这很昂贵,我认为并不是真的没有效率。有什么建议么?
使用正则表达式:
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
输出中是否存在来完成的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句