LeetCode 1541. Minimum Insertions to Balance a Parentheses String
LeetCode 1541. Minimum Insertions to Balance a Parentheses String (平衡括号字符串的最少插入次数)
题目
链接
https://leetcode-cn.com/problems/minimum-insertions-to-balance-a-parentheses-string/
问题描述
给你一个括号字符串 s ,它只包含字符 '(' 和 ')' 。一个括号字符串被称为平衡的当它满足:
任何左括号 '(' 必须对应两个连续的右括号 '))' 。
左括号 '(' 必须在对应的连续两个右括号 '))' 之前。
比方说 "())", "())))" 和 "())))" 都是平衡的, ")()", "()))" 和 ")" 都是不平衡的。
你可以在任意位置插入字符 '(' 和 ')' 使字符串平衡。
请你返回让 s 平衡的最少插入次数。
输入:s = ")"
输出:1
解释:第二个左括号有与之匹配的两个右括号,但是第一个左括号只有一个右括号。我们需要在字符串结尾额外增加一个 ')' 使字符串变成平衡字符串 "))" 。
示例
输入:s = ")"
输出:1
解释:第二个左括号有与之匹配的两个右括号,但是第一个左括号只有一个右括号。我们需要在字符串结尾额外增加一个 ')' 使字符串变成平衡字符串 "))"
提示
1 <= s.length <= 10^5
s 只包含 '(' 和 ')' 。
思路
同样思路,从左向右,不过需要注意,添加时左括号应该一直在左边,need的奇偶性要注意。
最后输出结果。
复杂度分析
时间复杂度 O(n)
空间复杂度 O(1)
代码
Java
public int minInsertions(String s) {
char[] ch = s.toCharArray();
int need = 0;
int ans = 0;
for (char c : ch) {
if (c == '(') {
need+=2;
if(need%2==1){
ans++;
need--;
}
}else {
need--;
if(need==-1){
ans++;
need=1;
}
}
}
return ans + need;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2019-03-25 命令行发送SMTP协议邮件(163邮箱)