我正在完成我的作业,似乎无法弄清楚如何做到这一点。
假设字母是{a,b,c}
,我们想要一个表达式,找到偶数个c
s的字符串。
包含的示例字符串:
empty set,
ccab
abcc
cabc
ababababcc
依此类推..只是偶数的c。
答案 0 :(得分:0)
答案 1 :(得分:0)
答案 2 :(得分:0)
假设c
的计数总数不是连续的c s - there is a nice theoretical approach, based on the fact that **a string with an even number of
c,可以表示为具有两个状态**的有限状态自动机。
第一个状态是初始状态,它也是一个接受状态。第二个是拒绝国家。每个c
在州之间切换。其他字母什么都不做。
现在,您可以使用one of the methods described here将此简单计算机转换为正则表达式。
答案 3 :(得分:0)
像
这样的东西^([^c]*(c[^c]*c)+)*[^c]*$
应该这样做。我们可以解决它,因此:
^ # - start-of-line, followed by
( # - a group, consisting of
[^c]* # - zero or more characters other than 'c', followed by
( # - a group, consisting of
c # - the literal character 'c', followed by
[^c]* # - zero or more characters other than 'c', followed by
c # - the literal character 'c'
)+ # repeated one or more times
)* # repeated zero or more times, followed by
[^c]* # - a final sequence of zero or more characters other than 'c', followed by
$ # - end-of-line
有人可能会注意到类似下面的C#方法可能会表现得更好并且更容易理解:
public bool ContainsEvenNumberOfCharacters( this string s , char x )
{
int cnt = 0 ;
foreach( char c in s )
{
cnt += ( c == x ? 1 : 0 ) ;
}
bool isEven = 0 == (cnt&1) ; // it's even if the low-order bit is off.
return isEven ;
}
答案 4 :(得分:0)
简单地
/^(([^c]*c[^c]*){2})*$/
英文:
零个或多个字符串,每个字符串恰好包含c的两个实例,前面或后跟任意数量的非c。
这种解决方案的优势在于它可以很容易地扩展到具有多个c等的c的字符串的情况,并且不对字母表做出任何假设。