/************************************************************************/ /* 给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。 * 举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。 * 再比如对于字符串") ()() )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 * 再比如对于"( () () )",它的长度为6。 * 换言之,便是有效双括号"()"数的两倍。 * 给定函数原型int longestValidParentheses(string s),请完成此函数,实现上述功能。 */ /************************************************************************/ //用一个栈即可实现 static void Main(string[] args) { string s = "( () () )"; int r = 0; r = longestValidParentheses(s); Console.WriteLine("r={0}", r); Console.ReadKey(); } static int longestValidParentheses(string s) { int r=0; if (null==s || 0==s.Length) { Console.WriteLine("字符串为空。"); return r; } /* for (int i = 0; i < s.Length;i++ ) { if (!(s[i]=='(' || s[i]==')')) { Console.WriteLine("字符串中包含非法字符 {0}",s[i]]); return 0; } }*/ Stack<char> stack = new Stack<char>(); for (int i = 0; i < s.Length;i++ ) { char c=s[i]; if (c=='(') { stack.Push(c); } else if (c==')') { if (0 < stack.Count && stack.Peek() == '(') { stack.Pop(); r=r+2; } } } return r; }