class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetMax(")()(()())("));
Console.Read();
}
static int GetMax(String str)
{
Regex regex = new Regex("((?<open>\\()|(?<-open>\\)))*(?(open)(?!))");
var matches = regex.Matches(str);
return matches.OfType<Match>().Max(m => m.Length);
}
}
当然,使用双层for循环也可以解决,但没有平衡组匹配解决的简单。