괄호 가 일치 하 는 지 확인 합 니 다.
2430 단어 데이터 구조
방법 (1): 각 문 자 를 순서대로 읽 고 왼쪽 괄호 라면 스 택 에 들 어 갑 니 다. 오른쪽 괄호 라면 스 택 꼭대기 가 대응 하 는 왼쪽 괄호 인지 확인 하 십시오. 그러면 스 택 꼭대기 요 소 를 팝 업 합 니 다. 한 쌍 의 괄호 가 일치 하 는 것 을 의미 하고 다음 문 자 를 판단 합 니 다.그렇지 않 으 면 일치 에 실 패 했 음 을 설명 합 니 다.마지막 으로 스 택 이 비어 있어 야 일치 하 는 지 판단 하고 왼쪽 괄호 개수 와 오른쪽 괄호 개수 가 일치 하지 않 는 것 을 방지 하 십시오.방법 (2): 방법 1 사상 과 일치 하지만 방법 2 의 확장 성 이 비교적 좋다. 만약 에 다른 괄호 (예 를 들 어) 등 을 추가 하면.
방법 1 코드: (C 언어 라면 스 택 데이터 구조 Stack 을 이미 실현 했다 는 전제 에서)
int IsValid(char* str)// 1, 0
{
assert(str);
Stack s;
StackInit(&s, 10);
while (*str)
{
if ((*str == '(') || (*str == '[') || (*str == '{'))// " ",
{
StackPush(&s,*str);
}
else// ( , )
{
char top = StackTop(&s);
if (*str == ')')// ')'
{
if (top == '(')
{
return 1;
}
else
{
return 0;
}
}
else if (*str == ']')// ']'
{
if (top == '[')
{
return 1;
}
else
{
return 0;
}
}
else if (*str == '}')// '}'
{
if (top == '{')
{
return 1;
}
else
{
return 0;
}
}
else// ,
{
return 0;
}
}
str++;//
}
// ,
if (StackEmpty(&s) == 0)
{
return 1;
}
else
{
return 0;
}
}
방법 2 코드:
int IsValid(char* str)// 1, 0
{
assert(str);
Stack s;
StackInit(&s, 10);
char symbol[][2] = {
{'(', ')'},
{'[', ']'},
{'{', '}'}
};
while (*str)
{
int i = 0;
for (i = 0; i < sizeof(symbol) / sizeof(symbol[0]); i++)
{
if (*str == symbol[i][0])// , ,
{
StackPush(&s, *str);
str++;
break;
}
}
// ,break *str , , 。 for , *str ,
if (i == sizeof(symbol) / sizeof(symbol[0]))
{
char top = StackTop(&s);
for (int i = 0; i < sizeof(symbol) / sizeof(symbol[0]); i++)
{
if (*str == symbol[i][1])// ,
{
if (top == symbol[i][0])
{
StackPop(&s);//
str++;//
break;
}
else
{
return 0;
}
}
}
}
}
if (StackEmpty(&s) == 0)
{
return 1;
}
else
{
return 0;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.