第八屆藍(lán)橋杯 正則問題 Java A組

描述:正則問題

考慮一種簡(jiǎn)單的正則表達(dá)式:
只由 x ( ) | 組成的正則表達(dá)式。
小明想求出這個(gè)正則表達(dá)式能接受的最長字符串的長度。

例如 ((xx|xxx)x|(x|xx))xx 能接受的最長字符串是: xxxxxx,長度是6。

輸入

一個(gè)由x()|組成的正則表達(dá)式。輸入長度不超過100,保證合法。

輸出

這個(gè)正則表達(dá)式能接受的最長字符串的長度。

例如,
輸入:
((xx|xxx)x|(x|xx))xx

程序應(yīng)該輸出:
6

資源約定:
峰值內(nèi)存消耗(含虛擬機(jī)) < 256M
CPU消耗 < 1000ms

請(qǐng)嚴(yán)格按要求輸出,不要畫蛇添足地打印類似:“請(qǐng)您輸入...” 的多余內(nèi)容。

所有代碼放在同一個(gè)源文件中,調(diào)試通過后,拷貝提交該源碼。
不要使用package語句。不要使用jdk1.7及以上版本的特性。
主類的名字必須是:Main,否則按無效代碼處理。

思路

  1. 將輸入都存入數(shù)組內(nèi) - nextLine.split("")
  2. 字符串判斷相等 "".equals("")
  3. 回調(diào)深搜

代碼

import java.util.Scanner;

public class Main {
    static int len = 0;
    static String[] arr;
    public static void main (String args[]) {
        Scanner sc = new Scanner(System.in);
        arr = sc.nextLine().split("");
        
        int re = dfs();
        System.out.println(re);
    }
    
    static int dfs() {
        int result = 0, num = 0;
        
        while(len < arr.length) {
            if (arr[len].equals("(")) {
                len ++;
                num = num + dfs();
            }
            else if (arr[len].equals("|")) {
                len ++;
                result = num > result ? num : result;
                num = 0;
            } 
            else if (arr[len].equals(")")) {
                len ++;
                break;
            } else {
                len ++;
                num ++;
            }
        }
        result = num > result ? num : result;
        return result;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容