牛客 檢測命令是否正確

提取題意,考慮是正向判斷還是反向判斷比較關鍵.

命令只能由小寫字母/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");

    }

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