カッコを回転[スタック/キュー]
かっこを回転
次の規則に従う文字列は、有効なカッコ文字列として定義されます. ()、[]および{}は有効なカッコ文字列です. Aが有効な括弧文字列である場合、(A)、[A]および{A}も有効な括弧文字列である.たとえば、[]は有効な括弧文字列であり、([])も有効な括弧文字列である. A、Bが有効な括弧文字列であれば、ABも有効な括弧文字列である.たとえば、{}および([])は有効なカッコ文字列であり、{}([])も有効なカッコ文字列です.
sをx(0≦x<(sの長さ)格子に左に回転すると、solution関数を完了し、sを正しいカッコ文字列にするxの個数を返します. sの長さは1または1000以上です. >入力
[2021.04.28]
回転を一つ一つ仕上げて、時間の複雑さはあまりよくありません.より良い方法を見つける
🔍 問題の説明
次の規則に従う文字列は、有効なカッコ文字列として定義されます.
sをx(0≦x<(sの長さ)格子に左に回転すると、solution関数を完了し、sを正しいカッコ文字列にするxの個数を返します.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다.
▼▼▼トラブルシューティング方法
- '(', '[', '{' : 스택에 push
- 나머지 경우(')', ']', '}')
- 스택이 비었는지(짝의 개수가 맞지않는 경우)
- 같은 경우인지(짝의 모양이 맞지않는 경우)
를 제외한 경우에만 answer(올바른 괄호 모양)값을 증가시켜준다.
- 왼쪽으로 한 칸씩 땡기기
📃 コード#コード#
[2021.04.28]
#include <string>
#include <vector>
#include <stack>
using namespace std;
int solution(string s) {
int answer = 0, size = s.size();
while(size--) {
bool exit = true;
stack<char> a;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(' || s[i] == '{' || s[i] == '[') a.push(s[i]);
else {
if (a.empty()) {
exit = false;
break;
}
switch (s[i]) {
case ')':
if (a.top() == '(') a.pop();
else exit = false;
break;
case '}':
if (a.top() == '{') a.pop();
else exit = false;
break;
case ']':
if (a.top() == '[') a.pop();
else exit = false;
break;
}
}
if (!exit) break;
}
if (a.empty() && exit) answer++;
char b = s[0];
s = s.substr(1, s.size() - 1) + b;
}
return answer;
}
回転を一つ一つ仕上げて、時間の複雑さはあまりよくありません.より良い方法を見つける
Reference
この問題について(カッコを回転[スタック/キュー]), 我々は、より多くの情報をここで見つけました https://velog.io/@yerin6860/스택큐-괄호-회전하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol