zoukankan      html  css  js  c++  java
  • PTA符号配对


    import java.util.Scanner;
    import java.util.Stack;
    
    public class Main {
    
    	private static final char LEFT_XIAO = '(';
    	private static final char RIGFHT_XIAO = ')';
    	private static final char LEFT_HUA = '{';
    	private static final char RIGHT_HUA = '}';
    	private static final char LEFT_FANG = '[';
    	private static final char RIGHT_FANG = ']';
    	static Stack<Character> stack = new Stack<Character>();
    	private static String s;
    	private static boolean leftFlag = true;
    	private static boolean rightFlag = true;
    	private static String rightChar = "";
    
    	public static void main(String[] args) {
    		Scanner cin = new Scanner(System.in);
    		while (cin.hasNext()) {
    			s = cin.nextLine();
    			isBalance();
    			if (leftFlag && rightFlag)
    				;
    			else
    				break;
    			if (s.equals("."))
    				break;
    		}
    		cin.close();
    		if (!stack.isEmpty()) {
    			char cc = stack.pop();
    			System.out.println("NO");
    			if (cc == LEFT_XIAO || cc == LEFT_HUA || cc == LEFT_FANG) {
    				System.out.println(cc + "-?");
    			} else if (cc == '<') {
    				System.out.println("/*-?");
    			}
    			leftFlag = false;
    			rightFlag = false;
    		}
    		if (leftFlag && rightFlag) {
    			System.out.println("YES");
    		} else if (rightFlag) {
    			System.out.println("NO");
    			System.out.println("?-" + rightChar);
    		} else if (leftFlag) {
    			System.out.println("NO");
    			System.out.println((stack.peek() == '<' ? "/*" : stack.pop()) + "-?");
    		}
    	}
    
    	public static void isBalance() {
    		int len = s.length();
    		for (int i = 0; i < len; ++i) {
    			char c = s.charAt(i);
    			if (c == LEFT_XIAO || c == LEFT_HUA || c == LEFT_FANG) {
    				stack.push(c);
    			} else if (c == '/' && i + 1 < len && s.charAt(i + 1) == '*') {
    				stack.push('<');
    				++i;
    			} else {
    				if (c == RIGFHT_XIAO || c == RIGHT_HUA || c == RIGHT_FANG) {
    					if (stack.isEmpty()) {
    						leftFlag = false;
    						rightChar += c;
    						return;
    					}
    					if ((c == RIGFHT_XIAO && stack.peek() != LEFT_XIAO)
    							|| (c == RIGHT_HUA && stack.peek() != LEFT_HUA)
    							|| (c == RIGHT_FANG && stack.peek() != LEFT_FANG)
    							) {
    						rightFlag = false;
    						return;
    					}
    					stack.pop();
    				} else if (c == '*' && i + 1 < len && s.charAt(i + 1) == '/') {
    					if (stack.isEmpty()) {
    						leftFlag = false;
    						rightChar = "*/";
    						return;
    					}
    					if (stack.peek() != '<') {
    						rightFlag = false;
    						return;
    					}
    					stack.pop();
    					++i;// 这里容易忘,不然 用例/*/**/*/过不去(最后一个测试点)
    				}
    			}
    		}
    	}
    }
    ========================================Talk is cheap, show me the code=======================================


    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    Linux vi/vim
    Linux 磁盘管理
    Linux 用户和用户组管理
    Linux 文件与目录管理
    Linux 文件基本属性
    Linux 远程登录
    Linux 忘记密码解决方法
    Linux 系统目录结构
    Linux 系统启动过程
    linux -- su和sudo命令的区别
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179837.html
Copyright © 2011-2022 走看看