【算法编程】括号表达式问题

本文介绍了一种算法,用于计算给定字符串中符合特定规则的合法括号表达式的数量。通过使用栈来标记匹配的括号位置,并最终统计独立的合法表达式的个数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有如下规定
1,()是个合法表达式。
2,如果S是合法表达式,则(S)也是个合法表达式。
3,如果A和B都是合法表达式,则AB也是合法表达式。
4,其他的表达式都不是合法表达式
给你一个包含“(”和“)”的表达式,中间可能有多个合法表达式(只对满足规定的最长表达式进行计数,如“(())”和“()()” 都只算一个,不是两个),那这些合法表达式有多少个呢?
★数据输入
输入为一个长度不超过1000的包含“(”和“)”的非空字符串。
★数据输出
输出合法表达式的个数。
输入示例

()(()(()(()

输出示例
4

 

代码:


  1. #include<iostream.h>
  2. #include<stack>
  3. #include<string.h>
  4. using namespace std;
  5. int main()
  6. {
  7. char str[1001];
  8. int i,n=0;
  9. stack<int> sta;
  10. scanf("%s",&str);
  11. for(i=0;i<strlen(str);i++)
  12. {
  13. if(str[i]=='(') { sta.push(i);} //入栈。
  14. else if(str[i]==')')
  15. {
  16. if(!sta.empty())
  17. {
  18. str[i] = 1;
  19. str[sta.top()] = 1;
  20. sta.pop();
  21. }
  22. }
  23. }
  24. for(i=0;i<strlen(str);i++)
  25. if(str[i]==1&&str[i+1]!=1) n++;
  26. printf("%d/n",n);
  27. return 0;
  28. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值