''' LastEditTime: 2026-10-10 09:39:02 ''' classSolution: defminInsertions(self, s: str) -> int: ans = diff = i = 0 n = len(s) while i < n: if s[i] == '(': diff += 1 else: if diff: diff -= 1 else: ans += 1 if i + 1 < n and s[i + 1] == ')': i += 1 else: ans += 1 i += 1 return ans + diff * 2
/* * @LastEditTime: 2026-10-09 09:51:51 */ classSolution { private: intmeetLeft(int& left, int& right){ int ans = 0; if (right % 2) { right++; ans++; } int loss = min(left, right / 2); left -= loss; right -= loss * 2; ans += right / 2; right = 0; return ans; }
intmeetRight(int& left, int& right){ int ans = 0; if ((right + 1) / 2 > left) { ans += (right + 1) / 2; left = (right + 1) / 2; } int loss = min(left, right / 2); left -= loss; right -= loss * 2; return ans; } public: intminInsertions(const string& s){ int ans = 0; int left = 0, right = 0; for (char c : s) { if (c == '(') { ans += meetLeft(++left, right); } else { ans += meetRight(left, ++right); } } ans += meetLeft(left, right); ans += left * 2; return ans; } };