我最近遇到了一个问题,就是找到有效parantheses的所有可能子序列,其中括号由-x x之类的数字描述,其中' -x'表示开放和' x'代表关闭和 -x s x也代表一个有效的括号,其中'是一个有效的括号。
ex-例如," -1 -2 2 -3 -4 4 3 1"是一个平衡的括号对序列,但是" -1 -2 1 2"不是 和 -1 -2 9 2 -3 -4 3 4 8 8 1给出12
我正在尝试,但我无法想出这个问题的递归关系。任何帮助都会受到赞赏。谢谢。
答案 0 :(得分:0)
def findPairsOfParentheis(collection):
count = 0
flag = False
othercount = 0
for i in collection:
if i.startswith('-'):
if flag:
othercount += 1
continue
else:
othercount += 1
flag = True
else:
if flag:
if othercount > 1:
othercount -= 1
count += 1
else:
othercount = 0
flag = False
count += 1
else:
continue
return count
#代码是python,它打印括号对的数量,希望这有帮助
答案 1 :(得分:0)
任何有效的平衡括号序列都有一个唯一的最短平衡前缀(可能是整个序列)。该前缀的格式必须为( S )
,其中S
是一个平衡序列。此外,原始序列的其余部分必须是空的或平衡序列。因此,任何平衡序列都可以写成:
S = ( S1 ) S2
其中S1
和S2
都是较短的平衡序列。
这导致了一个简单的递归生成器。它还证明长度为2k
的有效括号序列的数量是索引k
的加泰罗尼亚数(使用加泰罗尼亚数字的标准递归关系,如果没有乳胶,这里很难输入)。
在数字形式中,您需要使用:
S = -1 S1' 1 S2'
其中S1'
中的索引通过递增1从S1
获得,S2'
通过递增S2
中的最大索引从S1'
获得(这是S1
长度的一半以上。)
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用两个堆栈,negStack
和posStack
; negStack
初始化为所有负括号,顺序为-1,posStack
为空。每当您从negStack
弹出一个负括号时,您将其正对应推到posStack
。
在每次递归通话中,您可以从negStack
弹出(假设它非空)并推送到postStack
,或者您可以从posStack
弹出(假设它& #39; s非空)。这意味着您的递归方法看起来像
void recurrence(Stack negStack, Stack posStack) {
// first recursive call: pop from negStack
int neg = negStack.pop();
posStack.push(-1 * neg);
recurrence(negStack, posStack);
// restore stacks
posStack.pop();
negStack.push(neg);
// second recursive call: pop from posStack
int pos = posStack.pop();
recurrence(negStack, posStack);
// restore stacks
posStack.push(pos);
}
我省略了检查以查看negStack
或posStack
是否为空,以及存储和打印结果的代码等(例如,您可以使用另一个堆栈来存储括号'运行总计,然后在negStack
和posStack
为空时打印堆栈内容。