LeetCode_20.有効なかっこ


タイトル
「(',')」,「{','}','[,']」のみを含む文字列を与え,文字列が有効であるか否かを判断する.
有効な文字列は次のとおりです.
左かっこは同じタイプの右かっこで閉じる必要があります.左かっこは正しい順序で閉じなければなりません.注意空の文字列は有効な文字列とみなされます.
例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練習問題まとめ