c++ - 代码运行正确,但当括号数量更多时不起作用
问题描述
问题是检查字符串是否包含平衡括号。此代码在字符串为时工作正常,{{()}}
但在{{(())}}
. 另外,我想运行测试用例,例如当我插入 while 循环以检查它不能正常工作的各种测试用例时。
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int i,n;
string s;
getline(cin,s);
n = sizeof(s);
int c=0,c1=0;
for(i=0;i<n;i++)
{
if(s[i]=='{'||s[i]=='('||s[i]=='['){
c++;
}
else if(s[i]=='}'||s[i]==')'||s[i]==']'){
c1++;
}
}
if(c==c1)
{
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}
解决方案
对 {、[ 和 () 使用三个单独的堆栈。遇到左侧部分时推送,遇到右侧部分时弹出。所有堆栈在平衡时应该是空的。您需要编写一些额外的逻辑来检查混淆的符号。
推荐阅读
- ios - 从 appstore 下载时 Firebase Cloud Messaging 无法正常工作
- c# - 使用此 SQL 语法时收到错误
- c# - 条件表达式中的数据类型不匹配。MS AccessDB (cmd:ExecuteNonQuery())
- angular - 在 angular2 表中显示后端数据库数据
- reactjs - React JSX 中的字符串模板
- javascript - 使用threeJS在单个网页上的多个STL文件
- r - 具有多个列和条件的 if 语句
- angularjs - 无法在 ng-model 中绑定 $scope 对象以进行输入
- mining - 加密货币钱包区块链是否需要完全同步才能被挖掘?
- linked-list - 获取“旋转双向链表”的运行时错误