链接 :C. Recover an RBS
题意:
给定括号序列,其中一些位置是未知的,如果这些未知的位置能够确定填什么,那就YES,否则NO。
做法:
cnt统计问号?的数量,sum为左括号数量 - 右括号数量。当sum + cnt == 1时,可以确定这cnt个?全为(。这时候只需要清空cnt,然后让sum = 1。
最后,如果cnt == sum,说明最终剩下的这cnt个?必须为),也就是此时可以输出YES了。
代码:
void solve()
{
string s;
cin >> s;
int cnt = 0, sum = 0;
for (auto i : s)
{
if (i == '(') sum++;
else if (i == ')') sum--;
else cnt++;
if (cnt + sum == 1)
{
cnt = 0;
sum = 1;
}
}
if (sum == cnt) cout << "YES\n";
else cout << "NO\n";
}