Atcoder [ABC283D] Scopet题解

题面

here

思路

Part.1 暴力

如你所见,暴力最高可达到平方级,TLE是妥妥的
亲测会T掉4个

Part.2 正解

考虑优化?
暴力时,我们总是浪费大量时间返回操作,那么,能不能第一次遍历时就记录呢?
我们考虑到,一旦左括号遇到右括号,那么,括号内的字母会被全部清除。我们可以设置一个状态变量,若在一个括号序列内,重复出现了字母,那么就判断无法成功。具体思路请看代码注释:

Code

#include<bits/stdc++.h>
using namespace std;
string s;
int box[10001];
int main(){
	cin >> s;
	int now=0;
	for (int i=0;i<s.size();i++){
		if (s[i]=='('){
			now=1;	//设置状态为在括号内
		}
		else if (s[i]==')') {
			now=0;//设置状态为在括号外
			memset(box,0,sizeof(box));//清空盒子
		}
		else {
			if (box[s[i]]) {//如果已经盒中有了,判断不行
				cout << "No\n";
				return 0;
			}
			box[s[i]]=true;//把小球放入盒子
		}
	}    
	cout << "Yes\n";
   	return 0;
}

后记

本人语言表述可能有不清晰或不妥之处,欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值