题面
思路
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;
}
后记
本人语言表述可能有不清晰或不妥之处,欢迎指正