我必须(在 Java 中,但语言并不重要)编写一个函数,该函数将带括号的表达式(作为字符串)作为输入并返回所有不匹配括号的索引的集合。
该函数必须仅使用堆栈作为辅助数据结构。
例子:
Input: ”d(f(b)())o”
Return:[]
Input: ”**)**(d(f(b)())) **)** o **(**”
Return:[0, 12, 14]
解决这个问题的正确算法是什么?
我必须(在 Java 中,但语言并不重要)编写一个函数,该函数将带括号的表达式(作为字符串)作为输入并返回所有不匹配括号的索引的集合。
该函数必须仅使用堆栈作为辅助数据结构。
例子:
Input: ”d(f(b)())o”
Return:[]
Input: ”**)**(d(f(b)())) **)** o **(**”
Return:[0, 12, 14]
解决这个问题的正确算法是什么?
Stacks
括号匹配实际上是光荣的。在伪代码中,它看起来像
indices = []
for i->0, i<length(string), i++ do
if string[i] == "(" then
stack.push("(")
indexStack.push(i)
else if string[i] == ")" then
if stack.size() < 1 then
indices.append(i)
else
stack.pop()
indexStack.pop()
while indexStack.size() > 0 do
indices.append(indexStack.pop())
至于这是如何工作的解释。
char
是一个开放的paren,则将其压入堆栈char
是关闭的括号,请检查堆栈上是否有任何打开的括号indexStack
编辑:对不起,没有处理无与伦比的开放括号
你可以...
您可以有 2 个列表,一个负责开括号,另一个负责闭括号。这将使删除索引时更容易。