正确的括号序列

时间:2014-05-28 17:40:19

标签: c++ algorithm

请帮助编写C ++程序。我们有一系列括号。它由4种 - (),[],{},<>组成。需要找到具有正确放置括号的最短序列,其初始序列将是子序列,即。即将通过删除一些(可能为零)括号来从得到的正确序列中获得。

实施例: 初始序列<]}} {([]) 答案:< [] {} {}([])<>>

1 个答案:

答案 0 :(得分:1)

您提出的答案似乎不符合要求。例如,它看起来(至少对我而言)就像你可以通过删除}}{中的元素来生成<[] {} {} ([]) <>>序列。您似乎也有一对完全不必要的尖括号。据推测,您的意图还在于生成序列中的括号是平衡的 - 否则,正确的答案是简单地保持原始序列不变。没有其他要求,这显然是通过删除(零)项目来生成该序列的最短序列。

如果平衡要求正确,看起来原始输入有四种可能的正确结果:

<[]{}{}{([])}>
<[]{}{}{}([])>
<>[]{}{}{}([])
<>[]{}{}{([])}

所有这些都是相同的长度,所以我没有看到一个特别的理由偏爱一个而不是另一个。这看起来像家庭作业,我不会直接解决问题,但是我认为你可以为这份工作编写的最简单的代码可能会产生这四种解决方案中的第一种(和这可能至少提供一些关于我如何解决问题的指导。)

我有理由相信这可以完全使用计数器完成 - 不需要任何类型的“上下文堆栈”(尽管基于堆栈的解决方案当然也是可行的)。