给定只含 ( 与 ) 的长度为偶数的字符串。一次操作可以任选两个下标交换字符(非相邻也可)。要求把整个序列变为平衡括号序列的最少交换次数。
核心结论(贪心):从左到右扫描,用 bal 记录当前前缀中未匹配的左括号个数(看到 ( 则 bal++,看到 ) 则 bal--)。
bal 变为负数时,说明当前前缀中右括号比左括号多,无论最终目标是什么平衡序列,都至少需要一次交换,把某个后面的 ( 换到当前前缀里。) 当作 ( 处理:计数答案 ans++,并把 bal 设为 1(即从 -1 经过一次交换变成 +1)。我们称一个括号序列为"平衡的括号序列",当且仅当满足以下归纳定义:
1)空串是平衡的;
2)若字符串 A 是平衡的、则 “(A)” 是平衡的;