HDOJ 5479 Scaena Felix
2015-10-03 13:29
309 查看
题目链接:HDOJ5479
题目大意:t组测试,每组测试一个由”(”和”)”组成的字符串S,问要使S没有子串括号能匹配的最小代价是多少。一个代价定义为一次将“(”变成“)”,或则相反。
数据范围:
1≤|S|≤1,000
要使S的子串都没有括号匹配“()”,只有可能将S变成3种情况。
1.全是左括号“((…..”
2.全是右括号“))…..”
3.左边右括号,右边左括号“…..))((…..”
参考代码:
题目大意:t组测试,每组测试一个由”(”和”)”组成的字符串S,问要使S没有子串括号能匹配的最小代价是多少。一个代价定义为一次将“(”变成“)”,或则相反。
数据范围:
1≤|S|≤1,000
要使S的子串都没有括号匹配“()”,只有可能将S变成3种情况。
1.全是左括号“((…..”
2.全是右括号“))…..”
3.左边右括号,右边左括号“…..))((…..”
参考代码:
[code]#include <iostream> #include <string> using namespace std; int main() { int t; cin >> t; while(t--) { string st; cin >> st; int len = st.length(); int l[len], r[len]; for(int i = 0; i < len; ++i)//l[i]表示将[0,i]都变成")"的代价 { if(i == 0) l[i] = st[i] == '('; else if(st[i] == '(') l[i] = l[i - 1] + 1; else l[i] = l[i - 1]; } for(int i = len - 1; i >= 0; --i)//r[i]表示将[i,len - 1]都变成"("的代价 { if(i == len - 1) r[i] = st[i] == ')'; else if(st[i] == ')') r[i] = r[i + 1] + 1; else r[i] = r[i + 1]; } int ans = 2e9; for(int i = 0; i < len; ++i)//在3中情况中取小值 ans = min(ans, l[i] + r[i] - 1) ; cout << ans << endl; } return 0; }
相关文章推荐
- html学习之一
- 151003-动起来-Javascript
- react native windows开发环境搭建(一)
- JS(ajax笔记)
- 【HTML+CSS】(1)基本语法
- css 行内元素 块元素 替换元素 非替换元素 以及这些元素的width height margin padding 特性
- 浅谈HTML5之二:新增的元素和废除的元素
- 浅谈HTML5之一:语法的改变
- JavaScript显示和隐藏某个div
- jquery动态移除/增加onclick属性详解
- HTML学习记录<五> :列表
- HTML学习记录<四> :创建图像映射
- React 简介
- javascript 面向对象程序设计--深刻理解对象
- javascript 面向对象程序设计--深刻理解对象
- [LeetCode] 116 - Populating Next Right Pointers in Each Node
- 添加html元素
- AlterDialog 深究kongleifeng
- Json和map相互转换工具类
- Mac下进行Node.js开发环境的配置