タイトル
説明:定期的な問題
:単純な正規表現を検討し
た正規表現からなる| xのみを()。
暁明は受け入れることができ、正規表現の最も長い文字列の長さを見つけるしたいと思います。
XXXXXX、長さ6:たとえば((XX | XXX)X | |(X XX))の最長文字列が受け入れ可能であるX-X
入力
----
xで()|の正規表現を。法的保証するために、100以下の長さを入力します。
出力
----
この正規表現最長の許容可能な文字列の長さ。
たとえば、
次のように入力します
((XX | XXX)X- |(X- | XX))XXを
プログラムすべき出力:
6
:のためのリソース
(仮想マシンを含む)ピークメモリ消費量<256M
CPU消費量<1000ミリ秒
「入力してください...」不要なコンテンツ:厳密に出力の要件に従ってください、余計ないようなものを印刷します。
注:
主な機能は、0を返す必要があり、
使用が唯一のANSI C / ANSI C ++標準、
特別な機能を呼び出すことはありませんビルド環境やオペレーティングシステムに依存します。
すべての依存する機能は、明示的にソースファイルの#include <XXX>にしなければならない
共通ヘッダを操作することによって提供することができません省略されています。
提出プロセスは、注意を払うには、希望する言語とコンパイラ型のタイプを選択した場合。
コード
1 // 入力: 2 // ((XX | XXX)X | |(X XX))はxxを 3 // :出力 4 // 6 5の#include <iostreamの> 6の#include <cmath> 7の#include < 文字列。 > H 8 使用 名前空間STDを、 9 チャーマップ[ 100 + 5 ]。 10 INT iは= 0 。 11 12 のint FUNC(){ 13 INT MAXX = 0。// 临时最长长度 14 のint= TEMP 0 ; // 一時的な長さ 15 INT LEN = STRLEN(MAP); 16 ながら(I < LEN){ 17 IF(マップ[I] == ' ('){ //は括弧内の計算に入る 18は I ++ ; 19 TEMPのTEMP + = FUNC(); 20である } 他 IF(マップ[I] == ' | '){ // 長さ最長選択 21である ++ Iは、 22である マックス= MAX(TEMP、マックス); 23であります TEMP = 0 ; 24 25 } 他 IF(マップ[I] == ' )'){ // 括弧の計算一組 26は I ++ ; 27 BREAK ; 28 } 他 { // の長さ 29 TEMP ++ ; 30 I ++ ; 31のIS } 32 } 33は 戻り、MAX(TEMP、マックス)// 戻りブラケットの一対の結果 34である } 35 INT メイン(){ 36 cinを>> マップ。 37 int型の結果= FUNC()。 38 COUT <<結果<< ENDL。 39 }