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] 를 찾 을 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.