[ タイトル ]
文字列strを考えると、総合的な判断は、有効な文字列のブラケットではありません
例えば、STR = "()"、trueを返し、STR = "(()())"、trueを返し、STR = "(())"、trueを返します。
STR = "())"、falseを返す; STR = "()("、falseを返す; STR = "()A()"、falseを返します。
俺の:
1つの インポートjava.util.Stackを。 2 3 公共 ブールmy_isValid(文字列str) 4 { 5 であれば(STR == NULL || str.equals( "" )) 6 { 7 リターン 偽。 8 } 9 10 のchar [] CSTR = str.toCharArray()。 11 スタック<文字>スタック= 新しいスタック<> (); 12 のために(文字C:CSTR) 13 { 14 であれば(C == '(') 15 { 16 stack.push(C); 17 } 18 そう なら(C == '') ) 19 { 20 であれば(stack.empty()) 21 { 22 リターン 偽。 23 } 24 stack.pop()。 25 } 26 他の 27 { 28 リターン 偽。 29 } 30 } 31 リターンstack.empty()?真:偽; 32 }
時間の複雑さ:O(N)、空間的複雑:O(N)
左教師:
1 パブリック ブールのisValid(文字列STR) 2 { 3。 IF(STR == NULL || str.equals( "" )) 4。 { 5。 復帰 はfalse ; 6 } 7。 8。 CHAR [] =のChas str.toCharArray(); 9 INT 0 = COUNT; //は単にカウンタセット 10の ための(チャーC:チャズ) 。11 { 12れる IF(= C '(' && = C ')' !! ) 13である { 14 リターン 偽; 15 } 16 であれば(C == ')&& --count <0 ) 17 { 18 リターン 偽。 19 } 20 であれば(C == '(' ) 21 { 22 カウント++ ; 23 } 24 } 25 26 戻りカウント== 0 ; 27 }
時間計算量:O(N)、空間的複雑:O(1)
[詳細設定]タイトル
ブラケット文字列strを考えると、最も長い部分文字列の有効ブラケットを返します。
例えば、STR = "(()())"、6を返し、STR = "())"、2に戻り、STR = "()(()()("、4を返します
出典:左チェンユン先生「プログラマーコードインタビューガイド」