NYOJ 2 括号配对问题(栈)
来源:互联网 发布:淘宝推广 编辑:程序博客网 时间:2024/05/21 19:27
http://acm.nyist.net/JudgeOnline/problem.php?pid=2
1、标准代码:
#include<iostream>#include<vector>#include<string>using namespace std;int main(){int n;cin>>n;while(n--){ vector<char> vec;string ch;vec.push_back(' ');cin>>ch;unsigned int i=0;for(;i<ch.length();i++){vec.push_back(ch[i]);if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2)){vec.pop_back();vec.pop_back();}}if(vec.size()==1)cout<<"Yes"<<endl;elsecout<<"No"<<endl;}return 0;}2、时间内存最优
#include<stdio.h>int main(){int t;char c,s[10001],*p;scanf("%d\n",&t);while(t--){*s=getchar();p=s+1;while((c=getchar())!='\n'){if(*(p-1)==c-1||*(p-1)==c-2)p--;else*p++=c;}if(p==s)printf("Yes\n");elseprintf("No\n");}}
3、网友代码:
#include <iostream>#include <cstring>using namespace std;#define MAXSIZE 10005int main(void){int k;cin >> k;while(k--){char str[MAXSIZE];cin >> str;char stack[MAXSIZE];int len = strlen(str);int j = 0;bool tag = true;for(int i = 0; i < len; i++){switch(str[i]){case '(' :case '[' : stack[j++] = str[i];break;case ')' :if( stack[j - 1] == '(' ){tag = true;j--;}else tag = false;break;case ']' :if( stack[j - 1] == '[' ){tag = true;j--;}else tag = false;break;default : cout << "Error!" << endl;}if(tag == false)//NOTEbreak;}if( tag == true && j == 0 )cout << "Yes" << endl;elsecout << "No" << endl;}return 0;}
4、我的代码:
#include <iostream>#include <stack>#include <string>using namespace std;int main(int argc, char* argv[] ){int a;string str;cin>>a;while (a--) {cin>>str;unsigned int len=str.length();if(len % 2==1){cout<<"No"<<endl;}else{unsignedint i;stack<char> data;for(i = 0; i < len; i++) {if(data.empty()){data.push(str[i]);}else if(data.top()=='[' && str[i]==']'){data.pop();}else if(data.top()=='(' && str[i]==')'){data.pop();}else if(data.top()=='{' && str[i]=='}'){data.pop();}else{data.push(str[i]);}}if(data.empty()){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}}return 0;}
5、原理解析版
#include<iostream>#include<vector>#include<string>using namespace std;//原理解析版void printfdata(vector<char> data){unsigned int i=0;for (i=0;i<data.size();i++){cout<<data.at(i)<<" ";}cout<<endl;}int main(){int n;cout<<'('-0<<endl;cout<<')'-0<<endl;cout<<'['-0<<endl;cout<<']'-0<<endl;cout<<'{'-0<<endl;cout<<'}'-0<<endl;cin>>n;while(n--){ vector<char> vec;string ch;vec.push_back(' ');cin>>ch;unsigned int i=0;for(;i<ch.length();i++){vec.push_back(ch[i]);//压入栈中if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2))//{[()]} ascii相差1 或2 {//cout<<"开始处理 back-1="<<(char)(vec.back()-1)<<",back-2="<<(char)(vec.back()-2)<<endl;//printfdata(vec);vec.pop_back();vec.pop_back();//printfdata(vec);}}if(vec.size()==1)cout<<"Yes"<<endl;elsecout<<"No"<<endl;}return 0;}
6、Java标准版
import java.util.*;public class Main {public static void main(String args[]) {Scanner cin = new Scanner(System.in);int a;a = cin.nextInt(); while(a>0){String str=cin.next();if(str.length() % 2==1){System.out.println("No");}else{Stack<Character> stack=new Stack<Character>();for(int i=0;i<str.length();i++){if(stack.isEmpty()){stack.push(str.charAt(i));}else if(stack.peek()=='[' && str.charAt(i)== ']'){stack.pop();}else if(stack.peek()=='(' && str.charAt(i)== ')'){stack.pop();}else if(stack.peek()=='{' && str.charAt(i)== '}'){stack.pop();}else{stack.push(str.charAt(i));}}if(stack.isEmpty()){System.out.println("Yes");}else{System.out.println("No");}}a--;}cin.close();}}
1 0
- NYOJ 2 括号配对问题(栈)
- 括号配对问题--nyoj-2(栈)
- NYOJ 2 括号配对问题(栈)
- NYoj 2 括号配对问题(栈)
- 栈 NYOJ 2 (括号配对问题)
- NYOJ 2 括号配对问题 【栈】
- nyoj 2括号配对问题(栈)
- nyoj-2 括号配对问题 栈
- nyoj 括号配对问题(栈)
- NYOJ 括号配对问题(栈)
- NYOJ 括号配对问题(不用栈)
- NYOJ 2 括号配对问题(数据结构)
- NYOJ 题目2 括号配对问题(栈)(指针)
- NYOJ 2 括号配对问题 (栈 stack)
- nyoj--2--括号配对问题(栈函数)
- NYOJ 2 括号配对问题 (栈 stack)
- NYOJ:2 括号配对问题(初识栈)
- NYOJ 2 括号配对问题(经典题目,栈)
- C# VS2012下的3D显示(三)
- c# winform取消右上角关闭按钮的实现方法
- strong,weak,copy,retain和assign的区别
- Swift基础
- C语言字符串
- NYOJ 2 括号配对问题(栈)
- svn补充提交注释报错的处理方法
- Jquery 将表单序列化为Json对象
- java多线程学习笔记(二) ——Runnable
- 一台电脑安装多个版本的jdk
- C#动态执行字符串(动态创建代码)
- oracle与mysql差异
- 数据库表转为excel工具
- PhoneGap 开发环境搭建