赞
踩
这是一个括号匹配问题。通过分析可知
对于一个平衡字符串,从左往右遍历它,统计未匹配的左括号的个数 num,遇到左括号就加1,遇到右括号就减1,如果遍历时遇到右括号之后发现num为负数,那么就需要在后面找一个左括号并与这个右括号交换,然后使num+2.如果任何时刻 num 都不为负数,那么这个字符串就是平衡的。当然本题中给的数据最终都可以达到平衡状态。
通过分析,我们可以发现为了使后续的交换次数最小,这个被交换走的右括号应当越靠右越好,所以我们可以拿字符串最右边的左括号来交换。当然在实际求解这道题使可以不用考虑这点。我们默认我们交换的括号是最优的。
#include <iostream> #include <vector> using namespace std; int minSwaps(string s) { int num = 0, res = 0; for (int i = 0; i < s.size(); i++) { if (s[i]=='[') { num++; } else { num--; } if (num<0) { res++; num += 2; } } return res; } int main() { }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。