NYOJ 2 括号配对问题(栈)

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;
		else
			cout<<"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");
		else
			printf("No\n");
	}
}        

3、网友代码:

#include <iostream>
#include <cstring>
using namespace std;

#define MAXSIZE 10005
int 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)	//	NOTE
				break;
		}
		if( tag == true && j == 0 )
			cout << "Yes" << endl;
		else
			cout << "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{
			unsigned	int 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;
		else
			cout<<"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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
x1y2 x2y3 x3y1-x1y3-x2y1-x3y2 是计算三角形面积的公式中的一部分。 在这个公式中,x1、x2、x3分别表示三角形的三个顶点的x坐标,y1、y2、y3分别表示三角形的三个顶点的y坐标。通过计算这个表达式的值,可以得到三角形的面积。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [TetraCluster:使用并行Java 2库的Java并行程序。 该程序在群集并行计算机上运行,​​以从给定的点集中找到...](https://download.csdn.net/download/weixin_42171208/18283141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [线性代数有个题,求正交变换x=Qy,化二次型f(x1,x2,x3)=8x1x2+8x1x3+8x2x3为标准型求出特征值](https://blog.csdn.net/weixin_39956182/article/details/115882118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [nyoj-67-三角形面积(S=(1/2)*(x1y2+x2y3+x3y1-x1y3-x2y1-x3y2))](https://blog.csdn.net/weixin_30492601/article/details/99541033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值