Leetcode 20. 유효한 괄호 (C 언어 스 택)

4493 단어 Leetcode
제목 해석:
'(', ')', '{', '}', '[', ']' 만 포함 하 는 문자열 을 지정 하여 문자열 이 유효한 지 판단 합 니 다.유효한 문자열 은 만족 해 야 합 니 다. 왼쪽 괄호 는 같은 유형의 오른쪽 괄호 로 닫 아야 합 니 다.왼쪽 괄호 는 반드시 정확 한 순서 로 닫 아야 한다.빈 문자열 은 유효한 문자열 로 여 겨 질 수 있 습 니 다.
예제 1: 입력: "()" 출력: true 예제 2: 입력: "() [] {}" 출력: true 예제 4: 입력: "([)]" 출력: false
이 문 제 는 괄호 를 순서대로 닫 아야 데이터 구조 에 있 는 스 택 을 쉽게 생각 할 수 있다.닫 힌 괄호 를 찾 으 면 스 택 에서 나 옵 니 다. 그렇지 않 으 면 스 택 에 들 어 갑 니 다. 마지막 으로 true 를 판단 합 니 다. false 의 조건 은 스 택 이 비어 있 는 지 여 부 를 판단 하 는 것 입 니 다.
코드:
#include 
#include 
#include 
struct zhan{
    char data[100000];
    int top;//    
};

int enzhan(struct zhan *qu,char x){
    qu->top=qu->top+1;
    qu->data[qu->top]=x;
    return 1;
}//  

int dezhan(struct zhan*qu){
    qu->top=qu->top-1;
    return 1;
}//  

bool isValid(char* s) {
    struct zhan *p=(struct zhan *)malloc(sizeof(struct zhan));
    p->top=0;
    if(strlen(s)==0)return true;
    enzhan(p,s[0]);
    for(int i=1;i<strlen(s);i++)
    {
        if(p->data[p->top]=='[')
        {
            if(s[i]==']')dezhan(p);
            else enzhan(p,s[i]);
        }
        else if(p->data[p->top]=='(')
        {
            if(s[i]==')')dezhan(p);
            else enzhan(p,s[i]);
        }
        else if(p->data[p->top]=='{')
        {
            if(s[i]=='}')dezhan(p);
            else enzhan(p,s[i]);
        }
        else enzhan(p,s[i]);
    }
    if(p->top==0)return true;
    else return false;

}
int main()
{
    char *s=((char*)malloc(sizeof(char*)*10000));
    s="[]";
    bool i=isValid(s);
    printf("%d",i);
}

스 택 지붕 을 설정 할 때 top = - 1 을 설정 할 수 없습니다. 그렇지 않 으 면 판단 문 p - > data [p - > top] 에서 오 류 를 보고 하여 p - > data [- 1] 를 찾 을 수 없습니다.

좋은 웹페이지 즐겨찾기