【京东2017年秋招笔试题】统计移除括号对的方案数
来源:互联网 发布:ubuntu syslog函数 编辑:程序博客网 时间:2024/06/13 05:27
题目:例如:(),()()(),(()()),(((())))都是合法的。东东现在有一个合法的括号序列s,
一次移除操作分为两步
1.移除序列s中第一个左括号
2.移除序列s中任意一个右括号,保证操作之后s还是一个合法的括号序列
东东现在想知道使用上述的移除操作有多少种方案可以把序列s变为空
如果两个方案中有一次移除操作移除的是不同的右括号就认为是不同的方案
例如:s=()()()(),输出1,因为每次都只能选择被移除的左括号所相邻的右括号
s=(((()))),输出24,第一次有4种情况,第二次有3种情况……,依次类推4*3*2*1=24
s=(()()),输出4,第一次有3种情况为1.第一个左括号第一个右括号,变为(()),而这种第二次移除的时候有2种,故方案数为2
2.第一个左括号和第二个右括号,变为()(),方案数为1
3.第一个左括号和最后一个右括号,变为()(),方案数为1。共计4种
输入格式:输入一个合法的括号序列s,序列长度length(大于等于2小于等于20)
输出格式:输出一个整数,表示方案数
解题思路:
* 遍历字符串,每次把左括号都压入栈,每次遇到右括号,先统计栈中有几个左括号,统计数与上次统计数相乘
* 接着弹出栈中的一个左括号
* 直到遍历结束,结果即为方案数
import java.util.Scanner;import java.util.Stack;public class Solution {public static int find(String s) { //栈Stack<Character> ss=new Stack<Character>();char c;int cout=1;for (int i = 0; i < s.length(); i++) {c=s.charAt(i);if (c=='(') {ss.push(c);}if (c==')') {int val = 0;for(char x : ss){val++;}cout *= val;ss.pop();}}return cout;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNext()) {String s = scanner.nextLine();int cout = find(s);System.out.println(cout);} }}
- 【京东2017年秋招笔试题】统计移除括号对的方案数
- 笔试题 统计字符串单词数
- 保卫方案(京东2017笔试题)
- 华为笔试题:括号的排列组合
- 【网易笔试题】成对的括号
- n对括号的匹配方式(卡特兰数)
- [统计数对] 题解
- [.cpp]统计双拼拼音一种方案的重码数
- 对ListBox的添加移除操作
- 【2018校招笔试-京东=java开发】题目1括号匹配方案
- 【前端笔试】关于cookie的设置,获取和移除
- 网易2017春招笔试--移除重复元素
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题)
- 从归并排序到数列的逆序数对(微软笔试题) .
- 从归并排序到数列的逆序数对(微软笔试题)
- 随机出10道加法题,统计对的题数
- 8除不尽的数
- BOW
- 欢迎使用CSDN-markdown编辑器
- Canvas的实际使用
- PHP执行外部程序
- 基数排序
- 【京东2017年秋招笔试题】统计移除括号对的方案数
- JSTL标签用法,很重要!!!
- python运算符的优先级
- 最长线段(几何证明题)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A,C,F , H
- 大数据分析中的 数据,大数据
- 泛型数组列表 ArrayList 用法总结
- 算法|动态规划问题
- forward和redirect的区别