LeetCode_20.有効なかっこ
タイトル
「(',')」,「{','}','[,']」のみを含む文字列を与え,文字列が有効であるか否かを判断する.
有効な文字列は次のとおりです.
左かっこは同じタイプの右かっこで閉じる必要があります.左かっこは正しい順序で閉じなければなりません.注意空の文字列は有効な文字列とみなされます.
例1:
入力:()出力:true
例2:
入力:「()[]{}」出力:true
例3:
入力:[(]]出力:false
例4:
入力:「([)]出力:false
例5:
入力:{[]}出力:true
問題解
構想:配列シミュレーションスタック、右かっこは最後に現れた左かっこに一致しなければならない.一致すればスタックを出て、一致しなければ文字列は合法的ではない.右かっこがすべて一致した後、スタックトップが0を指すと文字列は合法的でnote:スタックトップポインタが0を指さないと左右かっこの数が一致しないことを説明する
LeetCode練習問題まとめ
「(',')」,「{','}','[,']」のみを含む文字列を与え,文字列が有効であるか否かを判断する.
有効な文字列は次のとおりです.
左かっこは同じタイプの右かっこで閉じる必要があります.左かっこは正しい順序で閉じなければなりません.注意空の文字列は有効な文字列とみなされます.
例1:
入力:()出力:true
例2:
入力:「()[]{}」出力:true
例3:
入力:[(]]出力:false
例4:
入力:「([)]出力:false
例5:
入力:{[]}出力:true
bool isValid(char* s) {
}
問題解
構想:配列シミュレーションスタック、右かっこは最後に現れた左かっこに一致しなければならない.一致すればスタックを出て、一致しなければ文字列は合法的ではない.右かっこがすべて一致した後、スタックトップが0を指すと文字列は合法的でnote:スタックトップポインタが0を指さないと左右かっこの数が一致しないことを説明する
bool isValid(char* s) {
int len = strlen(s), count = 0;
if (len == 0) return 1;
char flag[1000] = {0};
for (int i = 0; i < len; i++) {
switch(s[i]) {
case '(': flag[++count] = ')'; break;
case '{': flag[++count] = '}'; break;
case '[': flag[++count] = ']'; break;
case ')':
if (flag[count--] != s[i]) return 0;
break;
case '}':
if (flag[count--] != s[i]) return 0;
break;
case ']':
if (flag[count--] != s[i]) return 0;
break;
}
}
return count == 0;
}
LeetCode練習問題まとめ