0

我有这个问题,

编写一个函数来确定文本是否具有平衡的分隔符。有效分隔符对是 ()、[]、{} 和 <>。它们可能是嵌套的。此外,确定文本分隔符 ' 和 " 正确匹配。

顺便说一句,我正在用java编码..

对于每条测试线,如果有平衡分隔符,则输出为“1”,否则为“0”。

下面的一个例子,

4 --- 0

{123} --- 1

{qweqwe{sdad} --- 0

问题是,如何在 java 代码中编写来检查这对有效分隔符是否匹配?抱歉,我对分隔符知之甚少。

下面是我的代码..

public static void main(String args[]) {
        String a1 = "";
        try {
            Scanner readFile = new Scanner(new File("2.in.txt"));
            while (readFile.hasNextLine()) {

                a1 = readFile.nextLine();
                System.out.println(a1);
                if (a1.equals("18")) {
                    System.out.println("0");
                } else {
                    System.out.println("1");
                }
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
            return;
        }
    }
4

3 回答 3

6

这个问题的一般解决方案是使用堆栈。对于每个输入字符串,从一个空堆栈开始:

  • 当遇到开括号时,将其推入堆栈。
  • 当遇到右括号时,从堆栈中弹出并与右括号进行比较以查看它们是否是匹配对。如果没有,返回false。如果是,请继续。

遍历完字符串后,检查堆栈是否为空。如果是,则返回true,否则返回false

对于引号'和的情况",如果您不允许引号在同一个引号内,并且您不考虑转义语法,那么解决方案应该是相同的。

于 2012-07-23T10:43:49.333 回答
3

看看这段代码,它解决了类似的任务。

import java.util.Stack;

class BracketChecker {
  private String input;

  public BracketChecker(String in) {
    input = in;
  }

  public void check() {
    Stack<Character> theStack = new Stack<Character>();

    for (int j = 0; j < input.length(); j++) {
      char ch = input.charAt(j);
      switch (ch) {
      case '{': 
      case '[':
      case '(':
        theStack.push(ch);
        break;
      case '}': 
      case ']':
      case ')':
        if (!theStack.isEmpty()) {
          char chx = theStack.pop();
          if ((ch == '}' && chx != '{') || (ch == ']' && chx != '[') || (ch == ')' && chx != '('))
            System.out.println("Error: " + ch + " at " + j);
        } else

          System.out.println("Error: " + ch + " at " + j);
        break;
      default:
        break;
      }
    }
    if (!theStack.isEmpty()){
      System.out.println("Error: missing right delimiter");
    }
  }
}

public class MainClass {
  public static void main(String[] args) {
    String input;
    input = "[]]()()";

    BracketChecker theChecker = new BracketChecker(input);
    theChecker.check();
  }

}
于 2012-07-23T10:41:07.213 回答
0
boolean symbolsBalanced(String delimiter){
    String delimiters = "[]{}<>()";
    String text = "{(){}(){()(()())}}";
    Stack<Character> myStack= new Stack<Character>();
    int length = delimiters.length();
    left = new char[length/2];
    right = new char[length/2];
    for (int i=0; i<length/2; i++) {
        left[i] = delimiters.charAt(i+i); //It will contain [,{,<,(
        right[i] = delimiters.charAt(i+i+1); //It will contain ],},>,)
    }

    int tLen = text.length();
    for (int i=0; i<tLen; i++) {
        char c = text.charAt(i);
        for(int j=0; j<left.length; j++) {
            if(left[j]==c) {
                //If start braces is present, add in stack
                myStack.add(c);
                break;
            }
        }
        for(int j=0; j<right.length; j++) {
            if(right[j]==c) {
                //If stack is empty, then no use to continue the operation
                if(myStack.isEmpty()) return false;
                //If end braces is present, pop from stack
                myStack.pop();
                break;
            }
        }
    }
    if(myStack.isEmpty()) return true;
    return false;
}
于 2021-09-16T07:18:31.403 回答