CodeForces 612C Replace To Make Regular Bracket Sequence
2016-04-22 23:49
351 查看
题意:
给你一个只含有括号的字符串,你可以将一种类型的左括号改成另外一种类型,右括号改成另外一种右括号
问你最少修改多少次,才能使得这个字符串匹配,输出次数
思路:
用stack,每次将左括号压进stack里面,遇到右括号就判断一下就好了
非法就很简单,看看栈最后是否还有,看看右括号的时候,左括号的栈是否为空
Description
You are given string s consists of opening and closing brackets of four kinds <>, {}, [], ().
There are two types of brackets: opening and closing. You can replace any bracket by another of the same type. For example, you can replace < by the bracket {, but you can't replace
it by ) or >.
The following definition of a regular bracket sequence is well-known, so you can be familiar with it.
Let's define a regular bracket sequence (RBS). Empty string is RBS. Let s1 and s2 be
a RBS then the strings <s1>s2, {s1}s2, [s1]s2,(s1)s2 are
also RBS.
For example the string "[[(){}]<>]" is RBS, but the strings "[)()" and "][()()" are not.
Determine the least number of replaces to make the string s RBS.
Input
The only line contains a non empty string s, consisting of only opening and closing brackets of four kinds. The length of s does
not exceed 106.
Output
If it's impossible to get RBS from s print Impossible.
Otherwise print the least number of replaces needed to get RBS from s.
Sample Input
Input
Output
Input
Output
Input
Output
给你一个只含有括号的字符串,你可以将一种类型的左括号改成另外一种类型,右括号改成另外一种右括号
问你最少修改多少次,才能使得这个字符串匹配,输出次数
思路:
用stack,每次将左括号压进stack里面,遇到右括号就判断一下就好了
非法就很简单,看看栈最后是否还有,看看右括号的时候,左括号的栈是否为空
#include<bits/stdc++.h> using namespace std; string s; stack<char> S; int main() { cin>>s; int ans = 0; for(int i=0;i<s.size();i++) { if(s[i]==']') { if(S.size()==0)return puts("Impossible"); if(S.top()=='[') S.pop(); else { ans++; S.pop(); } } else if(s[i]==')') { if(S.size()==0)return puts("Impossible"); if(S.top()=='(') S.pop(); else { ans++; S.pop(); } } else if(s[i]=='>') { if(S.size()==0)return puts("Impossible"); if(S.top()=='<') S.pop(); else { ans++; S.pop(); } } else if(s[i]=='}') { if(S.size()==0)return puts("Impossible"); if(S.top()=='{') S.pop(); else { ans++; S.pop(); } } else S.push(s[i]); } if(S.size()!=0)return puts("Impossible"); cout<<ans<<endl; }
Description
You are given string s consists of opening and closing brackets of four kinds <>, {}, [], ().
There are two types of brackets: opening and closing. You can replace any bracket by another of the same type. For example, you can replace < by the bracket {, but you can't replace
it by ) or >.
The following definition of a regular bracket sequence is well-known, so you can be familiar with it.
Let's define a regular bracket sequence (RBS). Empty string is RBS. Let s1 and s2 be
a RBS then the strings <s1>s2, {s1}s2, [s1]s2,(s1)s2 are
also RBS.
For example the string "[[(){}]<>]" is RBS, but the strings "[)()" and "][()()" are not.
Determine the least number of replaces to make the string s RBS.
Input
The only line contains a non empty string s, consisting of only opening and closing brackets of four kinds. The length of s does
not exceed 106.
Output
If it's impossible to get RBS from s print Impossible.
Otherwise print the least number of replaces needed to get RBS from s.
Sample Input
Input
[<}){}
Output
2
Input
{()}[]
Output
0
Input
]]
Output
Impossible
相关文章推荐
- Leetcode #51&52 N-Queens I&II N皇后问题 1&2 解题报告
- Win10系统自带输入法的人机交互设计
- POJ_3061_Subsequence_(尺取法)
- iOS--UINavigationController学习笔记
- 【Android UI】音频条形图
- StringBuffer和StringBuilder的区别
- 关于在使用c3p0 连接池配置数据库连接时出现 com.mchange.v2.resourcepool.CannotAcquireResourceExceptiond问题的解答
- stl容器区别(内存布局和使用场合): vector list deque set map
- poj2524 Ubiquitous Religions
- SystemUI statusbar 更换自己的UI图标
- hdu 2767 Proving Equivalences //tarjan+缩点
- UITableView边线贴边
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(四)
- iOS改变 状态栏 颜色。改变UIStatusBarStyle 带NavigationController的。
- requiresConstraintBasedLayout <iOS>
- iOS-Core-Animation-Advanced-Techniques(六)
- 关于request.setAttribute如果里面存的是类似于javabean的样子你怎么办?
- Json的JsonValueProcessor方法
- IOS学习之——UIRefreshControl下拉刷新控件
- Ubutu Mosquitto部署和相关的配置(支持websocket)