使用堆栈检查括号

时间:2019-04-04 05:44:19

标签: java

我正在检查Java中的括号并在某些问题上运行。

任务是使用堆栈检查括号。那是我到目前为止写的。问题是我需要测试很多字符串,并且必须将所有这些字符串放入数组中。我创建了一个循环,一次可以测试一个字符串。问题是,当循环结束时,我不知道如何重置/清空堆栈。我认为这会导致问题和错误的答案。我还需要能够忽略括号之间的任何字母,但是我的代码似乎无效。我将很高兴听到关于如何改进代码的任何建议。

 public static void main (String []a)

 {       

      String [] array = new String [] {"(", ")", "()", "{)", "(()", "())"};

      Stack <Character> symbol = new Stack <Character>();   

      for (int i=0; i< array.length; i++)

      {             
           String example = array [i];

           for (int count=0; count < example.length(); count++)
           {  
                char ch = example.charAt(count);   

                if (ch =='('|| ch =='{'||ch =='[')
                {
                     symbol.push(example.charAt(count));
                }

                else if 
                     (!symbol.isEmpty()&& 
                      ((ch ==')'&& symbol.peek()=='(')||
                       (ch =='}'&& symbol.peek()=='{')||
                       (ch ==']'&& symbol.peek()=='[')))
                {
                     symbol.pop();
                }

                 else if
                  (!(example.contains("(")) || !(example.contains("{")) || !(example.contains("[")) || !(example.contains("]")) || !(example.contains(")"))|| !(example.contains("}")))
                {
                 count++;
                 }         

                else 
                {
                     symbol.push (ch);
                }          
           }

           if (symbol.isEmpty()) 
           {
                System.out.println("String is balanced");
           } 
           else 
           {
                System.out.println("String is not balanced");
           }       

      }  

 }

1 个答案:

答案 0 :(得分:1)

如果要检查方括号是否在不同字符串数组中保持平衡,则将用于“方括号平衡检查”的代码放入其自己的方法中,然后从用于循环遍历不同数组的循环中字符串调用您的方法以在每次迭代时检查每个字符串,例如:

for (int i = 0; i < myArrayOfStrings.length; i++) {
    boolean balanced = areBracketsValid(myArrayOfStrings[i]);
    System.out.println("Index #" + i + ":\t" + balanced + " -->\t" + myArrayOfStrings[i];
} 

使用堆栈检查括号的代码:

public static boolean areBracketsValid(String inputString) {
    char[] brackets = new char[256];
    // Parentheses
    brackets['('] = '(';
    brackets[')'] = '(';
    // Square Brackets
    brackets['['] = '[';
    brackets[']'] = '[';
    // Curly Braces
    brackets['{'] = '{';
    brackets['}'] = '{';
    // Chevron Brackets
    brackets['<'] = '<';
    brackets['>'] = '<';

    Stack<Character> stack = new Stack<>();

    for (Character char1 : inputString.toCharArray()) {
        char char2 = brackets[char1];
        if (char2 == char1) {
            stack.push(char1);
        }
        else if (char2 > 0) {
            if (stack.isEmpty() || char2 != stack.pop()) {
                return false;
            }
        }
    }
    return stack.isEmpty();
}

是的,您可以添加任何喜欢的单字符括号类型,甚至包括字母。

如果括号被非法放置,则此方法将返回false,例如: [(])