括号序列匹配问题
来源:互联网 发布:java snmp api 编辑:程序博客网 时间:2024/06/06 14:08
题目描述:
合法的括号匹配序列被定义为:
1. 空串""是合法的括号序列
2. 如果"X"和"Y"是合法的序列,那么"XY"也是一个合法的括号序列
3. 如果"X"是一个合法的序列,那么"(X)"也是一个合法的括号序列
4. 每个合法的括号序列都可以由上面的规则生成
例如"", "()", "()()()", "(()())", "(((())))"都是合法的。 东东现在有一个合法的括号序列s,一次移除操作分为两步:
1. 移除序列s中第一个左括号
2. 移除序列s中任意一个右括号.保证操作之后s还是一个合法的括号序列
东东现在想知道使用上述的移除操作有多少种方案可以把序列s变为空
如果两个方案中有一次移除操作移除的是不同的右括号就认为是不同的方案。
例如: s = "()()()()()",输出1, 因为每次都只能选择被移除的左括号所相邻的右括号.
s = "(((())))",输出24, 第一次有4种情况, 第二次有3种情况, ... ,依次类推, 4 * 3 * 2 * 1 = 24。
思路:
这个题字符串长度不长,可以直接爆搜。
有一种代码比较简单的解法,挨着累计'('的个数,遇到')'就完成一次匹配,把情况数乘进答案。本质是把题目所说的移除操作做了一个等价的变化。
java代码如下:
import java.util.Scanner;import java.util.Stack;public class Main07 {public static void main(String[] args){Scanner in = new Scanner(System.in);String string=in.next();chkParenthesis(string);}private static void chkParenthesis(String string) {if(string.length()%2==1) return ;char c[] =string.toCharArray();int left =0;int sum=1;for(int i=0;i<c.length;i++){if(c[i]=='(') {left++; }else {sum*=left;left--;}/*if(left<0) return false;}*/}System.out.println(sum);return ;}}
(((())))
输出:24
阅读全文
0 0
- 括号序列匹配问题
- 括号匹配(小中大括号序列)
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 括号的匹配问题
- 括号匹配问题
- 括号匹配问题
- [栈] 括号匹配问题
- NY : 括号匹配问题
- 括号匹配问题
- Java 括号匹配问题
- 括号匹配问题
- 括号匹配问题
- 枚举类写法
- Spring-MyBatis 之 SqlSessionFactoryBean
- spring基础知识点
- IntelliJ IDEA 安装指南
- Android面试之简历篇
- 括号序列匹配问题
- ServletContext && ServletContextListen 的用法案例-->统计网站访问量
- 一篇文章轻松搞懂原型对象和原型链
- 《Python核心编程(第2版)》读书笔记(4)之浅拷贝、深拷贝(关键词:Python/浅拷贝/深拷贝)
- 用C扩展python3
- 尺取法的应用
- 让光模块写码变得“so Easy!”
- Servlet 生命周期、工作原理
- Java基础总结