问题描述
我正在试图找出找到外括号计数的解决方案。
您将在下面的示例中更清楚地了解外部括号的含义。假设给定的表达式始终有效。
I am trying to figure out the solution for finding the count of external parenthesis.
You will have more clarity on what i mean by external parenthesis in the below examples. Assume that the given expression will always be valid.
(a+b) //External parenthesis count = 1
(a+b)*(a-b) //External parenthesis count = 0
((a+b)*(a-b)) //External parenthesis count = 1
(((a+b)*(a-b))) //External parenthesis count = 2
((a)) //External parenthesis count = 2
(a + (b*c)) //External parenthesis count = 1
(a+b)+c //External parenthesis count = 0
我试过这个并且不知何故无法得到正确的逻辑。
所以我正在寻求创意。我从逻辑的角度来看更多。
I have tried this and somehow not able to get the right logic.
So i am reaching out for ideas. I am looking more from a logic perspective.
推荐答案
(a+b) //External parenthesis count = 1
(a+b)*(a-b) //External parenthesis count = 0
((a+b)*(a-b)) //External parenthesis count = 1
(((a+b)*(a-b))) //External parenthesis count = 2
((a)) //External parenthesis count = 2
(a + (b*c)) //External parenthesis count = 1
(a+b)+c //External parenthesis count = 0
对于每个()对删除(包括括号)不包含任何括号本身,例如(a + b)不包含(a + ( b * c ))。
For each ( ) pair delete ones (including the parenthesis) that don't contain any parenthesis themselves, eg (a+b) doesn't but (a + (b*c)) does.
//External parenthesis count = 1
* //External parenthesis count = 0
(*) //External parenthesis count = 1
((*)) //External parenthesis count = 2
() //External parenthesis count = 2
(a + ) //External parenthesis count = 1
+c //External parenthesis count = 0
现在只计算左边的括号对。请注意,这不适用于(a + b)或((a)),因此当括号仅存在于开头和结尾时,您可能需要一个特殊情况。
Now just count the parenthesis pairs left. Note this doesn't work for (a+b) or ((a)) so you might need a special case for when parenthesis only exists at the beginning and end.
externalCount = 0
loop
if first or last chars are not parens
exit loop
Remove the external pair of parentheses.
If the result is not well-formed
exit loop
externalCount++
repeat loop
end loop
确定它是否格式正确:
To determine if it is well-formed:
counter = 0
scan across the expression:
if '(' then counter++
if ')' then counter--
well formed if at end of the scan the counter is 0 and never went negative.
这篇关于查找外部括号的计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!