LeetCode 20有効な括弧/C++括弧マッチングの検査
9242 ワード
‘(’,’)’,’{’,’}’,’[’,’]’のみを含む文字列を与え,文字列が有効であるか否かを判断する.有効な文字列は、左カッコと同じタイプの右カッコで閉じる必要があります.左かっこは正しい順序で閉じなければなりません.注意空の文字列は有効な文字列とみなされます.
例1:
入力:()出力:true
例2:
入力:“(){}”出力:true
例3:
入力:[(]]出力:false
例4:
入力:「([)]出力:false
例5:
入力:{[]}出力:true
スタックの問題はとても古典的な問題です.各左かっこには右かっこが必要です.カッコが一致しているかどうかを確認する方法は、「期待される急迫度」で説明できます.
[
(
[
]
[
]
)
]
1
2
3
4
5
6
7
8
1を受け入れると、それに一致する8番目の括弧が現れることを期待していましたが、待っていたのは2番目の括弧でした.このとき、1番目の括弧「【」は辺にしか寄らず、2番目の括弧に一致する7番目の括弧「)」が現れるのを切に待つ.・・・・・と類推する.4番目の括弧を受け取った後、3番目の括弧の期待が満たされる.解消された後、2番目の括弧の期待がマッチングされるのが当面の最も急務となる.・・・・・と類推する.
この処理特徴はスタックの特徴と一致し,左かっこが現れるとスタックを押さえ,最も期待されるタスクとする.右かっこが表示されると、それは合法的ではないか、スタックの上部の左かっこを除去することができます.
ACコード:
例1:
入力:()出力:true
例2:
入力:“(){}”出力:true
例3:
入力:[(]]出力:false
例4:
入力:「([)]出力:false
例5:
入力:{[]}出力:true
スタックの問題はとても古典的な問題です.各左かっこには右かっこが必要です.カッコが一致しているかどうかを確認する方法は、「期待される急迫度」で説明できます.
[
(
[
]
[
]
)
]
1
2
3
4
5
6
7
8
1を受け入れると、それに一致する8番目の括弧が現れることを期待していましたが、待っていたのは2番目の括弧でした.このとき、1番目の括弧「【」は辺にしか寄らず、2番目の括弧に一致する7番目の括弧「)」が現れるのを切に待つ.・・・・・と類推する.4番目の括弧を受け取った後、3番目の括弧の期待が満たされる.解消された後、2番目の括弧の期待がマッチングされるのが当面の最も急務となる.・・・・・と類推する.
この処理特徴はスタックの特徴と一致し,左かっこが現れるとスタックを押さえ,最も期待されるタスクとする.右かっこが表示されると、それは合法的ではないか、スタックの上部の左かっこを除去することができます.
ACコード:
class Solution {
public:
bool isValid(string s) {
stack<char> stacha;
for(int i = 0; s[i] != '\0'; i++){
char c = s[i];
switch(c)
{
case '(':
stacha.push('(');
break;
case '{':
stacha.push('{');
break;
case '[':
stacha.push('[');
break;
case ')':
if(stacha.empty()) return false;
if(stacha.top() != '(') return false;
else stacha.pop();
break;
case '}':
if(stacha.empty()) return false;
if(stacha.top() != '{') return false;
else stacha.pop();
break;
case ']':
if(stacha.empty()) return false;
if(stacha.top() != '[') return false;
else stacha.pop();
break;
}
}
if(stacha.empty()) return true;
else return false;
}
};