學渣帶你刷Leetcode0020有效的括號

題目描述

給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。

示例 1:

輸入: "()"
輸出: true
示例 2:

輸入: "()[]{}"
輸出: true
示例 3:

輸入: "(]"
輸出: false
示例 4:

輸入: "([)]"
輸出: false
示例 5:

輸入: "{[]}"
輸出: true

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/valid-parentheses
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

白話題目:

輸入括號,按照規則輸出括號是否匹配,不能穿插,沒有其他輸入。

算法:

學過數據結構的小夥伴們會首先想到用棧,類似於見到左括號入棧,右括號出棧,最後棧爲空就算匹配了,中間有不匹配的地方就返回false就OK了。

但是請記住,數據就夠是一種思想,有些題不用自己費盡的去實現所有的數據結構進行push和pop的實現,下面請看用動態數組模擬就好。

詳細解釋關注 B站  【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB

C語言完全代碼

#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#include<string.h>
bool isValid(char * s)
{
    if (s == NULL || s[0] == '\0') //字符串爲空,算是匹配
        return true;
    char *stack = (char*)malloc(strlen(s)+1);
    int top =0;
    int i;
    for ( i = 0; s[i]!='\0';i++)
    {
        if (s[i] == '(' || s[i] == '[' || s[i] == '{')
            stack[top++] = s[i];   //所謂的入棧
        else    //當遇見右邊的時候
        {
            if ((--top) < 0)
                return false;//先減減,讓top指向棧頂元素
            if (s[i] == ')' && stack[top] != '(')    //看棧頂元素和輸入匹配否
                return false;
            if (s[i] == ']' && stack[top] != '[')
                return false;
            if (s[i] == '}' && stack[top] != '{')
                return false;
        }
    }
    //都匹配上了就都彈出棧了,   top=0,非0就是1
   return (!top);//
}

int main()
{
    printf("輸入字符串s\n");
    char  *s;
    s=(char *)malloc(sizeof(char));
    gets(s);

    bool result=isValid(s);
    printf("%d\n",result);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章