/************************************************************************/
/* 给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。
* 举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数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;
}
括号匹配
最新推荐文章于 2024-09-22 10:16:35 发布