确保括号平衡?

时间:2011-10-24 19:00:01

标签: java

我的任务是创建一个函数,检查是否有一些小的“(”和“大”[“括号并正确关闭。例如......

(()) [] ([])[(())]

......是对的,但是......

() [(]) 

...不正确。

有关如何开始解决此问题的任何建议?禁止使用递归函数。


这是我到目前为止所做的:

{
    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 ! ");
}

4 个答案:

答案 0 :(得分:4)

如何执行此操作的一般概述(假设您有一个字符串数组,每个字符串都包含一个括号):

  • 创建一个包含字符串的堆栈。
  • 对于每个“(”或“[”,推入堆栈。
  • 对于每个“)”或“]”,检查堆栈顶部是否与括号类型匹配。
    • 如果是,请丢弃堆栈顶部。
    • 否则,括号不匹配。

如果你的所有字符串都用尽了你的非空堆栈,你的括号也会不匹配。

答案 1 :(得分:1)

提示:保留包含开头字形的数据结构,并在出现结束字形时使用并更新它。

答案 2 :(得分:1)

任何使用递归完成的操作也可以通过迭代完成。如果您已经知道如何以递归方式执行此操作,则将其映射到while循环。这在Replace Recursion with Iteration中解释。

答案 3 :(得分:1)

您可以使用确定性有限自动机 - http://en.wikipedia.org/wiki/Deterministic_finite-state_machine