我的任务是创建一个函数,检查是否有一些小的“(”和“大”[“括号并正确关闭。例如......
(()) [] ([])[(())]
......是对的,但是......
() [(])
...不正确。
有关如何开始解决此问题的任何建议?禁止使用递归函数。
这是我到目前为止所做的:
{
int nr_ap_x = 0; // fie x - "("
int nr_ap_y = 0; // fie y - ")"
boolean corect = true;
for (int i=0; i < sir.length; i++)
{
if (sir[i].compareTo("(") == 0) nr_ap_x++;
else
if (sir[i].compareTo(")") == 0) nr_ap_y++;
if (nr_ap_x < nr_ap_y) corect = false;
}
if (nr_ap_x != nr_ap_y) corect = false;
if (corect) System.out.println("Parantezele sunt inchise corect ! ");
else System.out.println("Parantezele NU sunt inchise corect ! ");
}
答案 0 :(得分:4)
如何执行此操作的一般概述(假设您有一个字符串数组,每个字符串都包含一个括号):
如果你的所有字符串都用尽了你的非空堆栈,你的括号也会不匹配。
答案 1 :(得分:1)
提示:保留包含开头字形的数据结构,并在出现结束字形时使用并更新它。
答案 2 :(得分:1)
任何使用递归完成的操作也可以通过迭代完成。如果您已经知道如何以递归方式执行此操作,则将其映射到while循环。这在Replace Recursion with Iteration中解释。
答案 3 :(得分:1)
您可以使用确定性有限自动机 - http://en.wikipedia.org/wiki/Deterministic_finite-state_machine