[PRODrammers]カッコを回転


質問元:カッコを回転[programmers]、https://programmers.co.kr/learn/courses/30/lessons/76502

👨‍🏫質問する


次の規則に従う文字列は、有効なカッコ文字列として定義されます.
  • ()、[]および{}は有効なカッコ文字列です.
  • Aが有効な括弧文字列である場合、(A)、[A]および{A}も有効な括弧文字列である.たとえば、[]は有効な括弧文字列であり、([])も有効な括弧文字列である.
  • A、Bが有効な括弧文字列であれば、ABも有効な括弧文字列である.たとえば、{}および([])は有効なカッコ文字列であり、{}([])も有効なカッコ文字列です.
  • パラメトリック文字列sは、四角カッコ、大かっこ、小かっこからなる.sをx(0≦x<(sの長さ)格子に左に回転すると、solution関数を完了し、sを正しいカッコ文字列にするxの個数を返します.
    せいげんじょうけん
  • sの長さは1または1000以上です.
  • サンプルI/O


    sresult"{}" 3"}]()[{"2"[)(]"0"}}}"0

    I/O例説明


    I/O例#1
    下表は「「」が回転していることを示します。 2xsを左に回転するx格子の括弧文字列?0"{}"O 1"(){}["X 2"{}[]["O 3"{}[]("X 4"{}"O 5"}{"Xは、3つのxが有効な括弧文字列であるため、3を返さなければならない.I/O例#2下表は"}"()[{"回転を示す.xsを左に回転するx格子の括弧文字列?0"}[{"X 1"{}[{}"X 2"()[{}"X 2"()[{}"X 2"[{}][{}]O 3][{}][{}]]][{}]][{}]]][{}]][{}]]][{}]][{}]]][{}]]X4"[{}]()「O 5」{}]()["X是2个x是有效的括弧文字列,所以必须返还2的.I/O例#3 s,即使不能转变正确的卡科文字列,必须返还0.I/O例#4 s,也不能做正确的卡科文字列,必须返还0.💻コードはjavaにインポートされます。util.Stack; class Solution { public int solution(String s) { int answer = 0; StringBuilder sb = new StringBuilder(s); //文字列が有効な括弧文字列の場合は、答えを追加します。 for(int i = 0; i < s.length(); i++){ if(isCorrect(sb.toString())){ answer++; } //一番前の括弧を抜き、文字列の後ろに挿入します。 sb.append(sb.charAt(0)); sb.deleteCharAt(0); } return answer; } //伝達パラメータとして受信した文字列が有効な文字列であればtrueまたはfalseの関数を返します。 static boolean isCorrect(String str){ Stack<Character> stack = new Stack<>(); char first = str.charAt(0); //一番前の括弧が閉じている場合はチェックせず、すぐにfalseに戻ります if(first == ')' || first == '}' || first == ']'){ return false; } stack.push(first); //開いた括弧の後ろに閉じた括弧がある場合、stackでpop for(int i = 1; i < str.length(); i++){ char c = str.charAt(i); if(stack.isEmpty()){ stack.push(c); continue; } char peek = stack.peek(); if(peek == '(' && c == ')'){ stack.pop(); }else if(peek == '{' && c == '}'){ stack.pop(); }else if(peek == '[' && c == ']'){ stack.pop(); }else{ stack.push(c); } } //スタックが空の場合は、有効なカッコ文字列であるためtrueを返します。 if(stack.isEmpty()){ return true; } return false; } }💡后记:韩国的安装问题哦!😁但这次不仅仅是括弧,还有括弧和括弧,所以条件文变长了一些。😔但是,没有从用stack解决问题的框架中脱离很大,而且解决方法的速度也很速,没有例外,马上解决了.