匹配

来源:互联网 发布:.net mvc 商城源码 编辑:程序博客网 时间:2024/06/03 00:23

实验任务

小光头解开了老鼠的难题,老鼠很高兴,告诉他们,他们需要打败控制这个森林的大魔王才能走出这片森林。如果小光头能再帮他解开一个难题,他就告诉小光头去哪里找这个大魔王。

问题是这样的,老鼠给了一串由由(,),[,],{,},<,>构成的一个括号字符串,判断这个字符串左右括号是否匹配。

数据输入

输入包括多组数据,每组数据只有一行括号字符串,其长度不大于 10000。

数据输出

对于每组数据,若匹配则输出“Yes“,否则输出“No”。

输入示例

[()()]][]
[(])
([])

输出示例

No
No
Yes

解题思路

栈的简单运用,如果当前括号与栈顶中的括号相匹配,则栈顶括号出栈,否则当前括号入栈。若最终是空栈,则说明所有括号都是匹配的。

参考代码

C版本:

#include <stdio.h>  #include <string.h>  #define maxn 10010  typedef struct{      char data[maxn];      int top;  }stack;  stack st, *s=&st;  char m[128],str[maxn];  void Push(char c){s->top ++;s->data[s->top] = c;}  void Pop(){s->top--;}  char Top(){return s->data[s->top];}  int main()  {      m[')'] = '(',m[']'] = '[';        m['}'] = '{',m['>'] = '<';      while (scanf("%s",str) != EOF){          Push('#');          int len = strlen(str);          for (int i = 0;i < len;i++){              if (m[str[i]] == Top())                  Pop();              else                  Push(str[i]);          }          printf("%s\n",(Top() == '#')?"Yes":"No");       }      return 0;  }

C++版本

#include <iostream>  #include <string>  #include <map>  #include <stack>  using namespace std;  map<char,char> m;  //映射int main()  {      m[')'] = '(',m[']'] = '[';      m['}'] = '{',m['>'] = '<';      string str;      while(cin >> str){          stack<char> s;          s.push('#');          for (int i = 0;i < str.size();i++){              if(m[str[i]] == s.top())                  s.pop();              else                  s.push(str[i]);          }          printf("%s\n",(s.top() == '#')?"Yes":"No");                   }      return 0;  }
0 0
原创粉丝点击