牛客 检测命令是否正确

提取题意,考虑是正向判断还是反向判断比较关键.

命令只能由小写字母/AND/OR/NOT组成,不能有括号,不能由NOT开头且NOT不可以双否定.


import java.util.ArrayList;
import java.util.Scanner;
public class Test {
    public static void main(final String[] args) {
       Scanner sc = new Scanner(System.in);
       ArrayList<String> Orders = new ArrayList<>();
        // 得到所有多行输入
        while(sc.hasNextLine()){
            String l = sc.nextLine();
            // 底下这一行卡死多少英雄好汉:读到换行的空行,结束控制台读取
            Orders.add(l); 
            if( l.equals("") ) 
                break;// 这一行不会读到"\n"...
        }
        Test test = new Test();
        int t=0;
        while (t < Orders.size()) {
            // 对每一行进行判断
            String line = Orders.get(t++);
            // 命令如果是空行
            if(line.length() == 0 ){
                test.print(0);
            }else{
                String[] orders = line.split(" ");
                // 如果不是空行,对每一个元素进行判断(对语义进行判断)
                for(String tmp : orders){
                    if(test.isIllegalType(tmp))
                        break;
                }
                // 对语法规则判断
                if(test.isIllegalContent(orders))
                    test.print(1);
            }
        }
        sc.close();
    }
    public boolean isIllegalContent(String[] orders){
        // 是否用"NOT"开头
        if(orders[0].equals("NOT")){
            this.print(0);
            return false;
        }else{
            // 判断是否两个"NOT"连续
            for(int i=0;i<orders.length-1;i++)
                if(orders[i].equals("NOT") && orders[i+1].equals("NOT") ){
                    this.print(0);
                    return false;
                }
        }
        return true;
    }
    public boolean isIllegalType(String tmp){
        // 是否是小写字母
        if(tmp.length() == 1){
            if(!( tmp.charAt(0) >='a'&& tmp.charAt(0) <= 'z' )){
                this.print(0);
                return true;
            }
        }
        // 是否是"OR"
        else if(tmp.length() == 2){
            if(! tmp.equals("OR")){
                this.print(0);
                return true;
            }
        }
        // 是否是"AND"||"NOT"
        else if(tmp.length() == 3){
            if(!( tmp.equals("AND" )|| tmp.equals("NOT"))){
                this.print(0);
                return true;
            }
        }
        return false;
    }
    public void print(int i){
        if(i==0)
            System.out.println("0");
        else if (i==1)
            System.out.println("1");

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章