스 택 적용: 괄호 일치

1689 단어
제목: 문자열 을 지정 합 니 다. 그 중 문 자 는 세 가지 괄호 만 포함 합 니 다. 괄호 {}, 괄호 [], 괄호 (), 즉 '() [] {}' 이라는 여섯 글자 로 만 구성 되 어 있 습 니 다.알고리즘 을 설계 하여 이 문자열 이 일치 하 는 지 판단 합 니 다.괄호 매 칭 은 괄호 를 올 바른 순서 로 맞 춰 야 합 니 다. 예 를 들 어 '{[] ()}' 이나 '[({} [])]' 등 은 올 바른 형식 이 고 '[(])' 이나 '{()}' 또는 '({}])' 은 모두 올 바 르 지 않 은 형식 입 니 다.
우선, 모든 괄호 의 수량 에서 일치 하 는 것 을 고려 할 수 없다. 예 를 들 어 '[(])' 에 대해 서 는 괄호 와 괄호 가 수량 적 으로 일치 하지만 그들의 순 서 는 일치 하지 않 는 다.그 다음 에 왼쪽 괄호 의 각도 에 서면 다음 괄호 와 일치 하 는 오른쪽 괄호 의 위치 가 고정 되 지 않 습 니 다. 즉, 왼쪽 괄호 의 다음 괄호 는 왼쪽 괄호 일 수도 있 고 오른쪽 괄호 일 수도 있 습 니 다. 고려 하기 가 귀 찮 습 니 다.하지만 오른쪽 괄호 각도 에 서 는 훨씬 편리 하 다.문자열 이 일치 하려 면 첫 번 째 오른쪽 괄호 의 왼쪽 은 반드시 그 와 일치 하 는 왼쪽 괄호 임 을 발견 할 수 있 습 니 다.이렇게 하면 우 리 는 왼쪽 에서 오른쪽으로 문자열 을 검색 할 수 있 습 니 다. 왼쪽 괄호 를 만나면 버퍼 에 존재 합 니 다. 오른쪽 괄호 를 만나면 마지막 으로 버퍼 에 들 어간 문자 와 비교 할 수 있 습 니 다.여기에 창고 의 데이터 구 조 를 사용 하 였 다.
코드 는 다음 과 같 습 니 다:
#include 
#include 

//             
int isleft(char c)
{
    if(c=='('||c=='['||c=='{') return 1;//    ,  1
    if(c==')'||c==']'||c=='}')return 0;//    ,  0
}
//                      
char rev(char c)
{
    if(c=='(') return ')';
    if(c=='[') return ']';
    if(c=='{') return '}';
}

int main()
{
    //freopen("input.txt","r",stdin);
    char s[100];
    while(scanf("%s",s)!=EOF)
    {
        char stack[100];int top=0;//   ,     
        int flag=0;//           ,    
        int i;int len=strlen(s);
        for(i=0;i

좋은 웹페이지 즐겨찾기