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循環也可以解決,但沒有平衡組匹配解決的簡單。