一段时间p
一个字符串的w
是任意正整数p
这样w[i]=w[i+p]
每当这个方程的两边都被定义时。让per(w)
表示
最小周期的大小w
。我们说一个字符串w
是
周期性的当且仅当per(w) <= |w|/2
.
因此,非正式地,周期字符串只是由至少重复两次的前缀组成的字符串。唯一的复杂之处是,在字符串末尾,我们不需要前缀的完整副本。
例如,考虑字符串x = abcab
. per(abcab) = 3
as x[1] = x[1+3] = a
, x[2]=x[2+3] = b
并且没有更小的时期。字符串abcab
因此不是周期性的。然而,字符串ababa
是周期性的per(ababa) = 2
.
作为更多的例子,abcabca
, ababababa
and abcabcabc
也是有周期性的。
是否有正则表达式来确定字符串是否是周期性的?
我真的不介意正则表达式的哪种风格,但如果它有区别的话,Python 的任何东西re
支持。
你需要的是反向引用
\b(\w*)(\w+\1)\2+\b
这甚至匹配abcabca
and ababababa
.
\1
and \2
分别用于匹配第一和第二捕获组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)