[Swift]LeetCode921.使括号有效的最少添加 | Minimum Add to Make Parentheses Valid
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9828360.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a string S
of '('
and ')'
parentheses, we add the minimum number of parentheses ( '('
or ')'
, and in any positions ) so that the resulting parentheses string is valid.
Formally, a parentheses string is valid if and only if:
- It is the empty string, or
- It can be written as
AB
(A
concatenated withB
), whereA
andB
are valid strings, or - It can be written as
(A)
, whereA
is a valid string.
Given a parentheses string, return the minimum number of parentheses we must add to make the resulting string valid.
Example 1:
Input: "())" Output: 1
Example 2:
Input: "(((" Output: 3
Example 3:
Input: "()" Output: 0
Example 4:
Input: "()))((" Output: 4
Note:
S.length <= 1000
S
only consists of'('
and')'
characters.
给定一个由 '('
和 ')'
括号组成的字符串 S
,我们需要添加最少的括号( '('
或是 ')'
,可以在任何位置),以使得到的括号字符串有效。
从形式上讲,只有满足下面几点之一,括号字符串才是有效的:
- 它是一个空字符串,或者
- 它可以被写成
AB
(A
与B
连接), 其中A
和B
都是有效字符串,或者 - 它可以被写作
(A)
,其中A
是有效字符串。
给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。
示例 1:
输入:"())" 输出:1
示例 2:
输入:"(((" 输出:3
示例 3:
输入:"()" 输出:0
示例 4:
输入:"()))((" 输出:4
提示:
S.length <= 1000
S
只包含'('
和')'
字符。
12ms:直觉与算法
跟踪字符串的平衡:'('
's的数量减去's的数量')'
。如果字符串的平衡为0,则该字符串有效,并且每个前缀都具有非负平衡。
上述想法在匹配括号问题时很常见,但如果您之前没有看过,可能很难找到。
现在,考虑每个前缀的平衡S
。如果它是负数(比如-1),我们必须添加一个'('括号。另外,如果平衡S
是正数(比方说+B
),我们必须B
在末尾添加')'括号。
1 class Solution { 2 func minAddToMakeValid(_ S: String) -> Int { 3 var ans:Int = 0 , bal:Int = 0 4 for index in S.indices 5 { 6 bal += S[index] == "(" ? 1 : -1 7 if bal == -1 8 { 9 ans += 1 10 bal += 1 11 } 12 } 13 return ans + bal 14 } 15 }
16ms
1 class Solution { 2 func minAddToMakeValid(_ S: String) -> Int { 3 var incompleteSymbols: [Character] = [] 4 5 S.forEach { character in 6 if let lastIncomplete = incompleteSymbols.last { 7 if lastIncomplete == "(" && character == ")" { 8 incompleteSymbols.removeLast() 9 } 10 else { 11 incompleteSymbols.append(character) 12 } 13 } 14 else { 15 incompleteSymbols.append(character) 16 } 17 } 18 19 return incompleteSymbols.count 20 } 21 }
20ms
1 class Solution { 2 func minAddToMakeValid(_ S: String) -> Int { 3 if(S == ""){ 4 return 0 5 } 6 7 var arrS = Array(S).map{"\($0)"} 8 var open = 0 9 var unclosed = 0 10 for c in arrS { 11 if(c == "(") { 12 open += 1 13 } 14 if(c == ")") { 15 if( open > 0){ 16 open -= 1 17 } else { 18 unclosed += 1 19 } 20 } 21 } 22 var total = (open + unclosed) 23 return total 24 } 25 }
20ms
1 class Solution { 2 func minAddToMakeValid(_ S: String) -> Int { 3 var arr = [Character]() 4 S.forEach { (c) in 5 if arr.count>0 && arr[arr.count-1] == "(" && c == ")" { 6 arr.removeLast() 7 } else { arr.append(c) } 8 } 9 return arr.count 10 } 11 }
64ms
1 class Solution { 2 func minAddToMakeValid(_ S: String) -> Int { 3 var stack = [String]() 4 5 for i in 0..<S.count { 6 if S[i] == "(" { 7 stack.append(S[i]) 8 } else if S[i] == ")" && stack.last == "(" { 9 stack.removeLast() 10 } else { 11 stack.append(S[i]) 12 } 13 } 14 15 return stack.count 16 } 17 } 18 19 extension String { 20 subscript(i:Int) -> String { 21 let charIndex = self.index(self.startIndex, offsetBy: i) 22 return String(self[charIndex]) 23 } 24 }
转载于:https://www.cnblogs.com/strengthen/p/9828360.html
[Swift]LeetCode921.使括号有效的最少添加 | Minimum Add to Make Parentheses Valid相关推荐
- 使括号有效的最少添加
使括号有效的最少添加 给定一个由(和)括号组成的字符串S,我们需要添加最少的括号(或是),可以在任何位置,以使得到的括号字符串有效. 从形式上讲,只有满足下面几点之一,括号字符串才是有效的: 它是一个 ...
- LeetCode 921. 使括号有效的最少添加(栈)
1. 题目 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效. 从形式上讲,只有满足下面几点之一,括号字 ...
- [LeedCode]921. 使括号有效的最少添加
题目描述: 给定一个由 '(' 和 ')' 括号组成的字符串 S,我们需要添加最少的括号( '(' 或是 ')',可以在任何位置),以使得到的括号字符串有效.从形式上讲,只有满足下面几点之一,括号字符 ...
- LeetCode 1674. 使数组互补的最少操作次数(差分思想)
文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit . 每一次操作,你可以将 nums 中的任何整数替换为 1 到 limit 之间的 ...
- LeetCode 1653. 使字符串平衡的最少删除次数(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 s ,它仅包含字符 'a' 和 'b' . 你可以删除 s 中任意数目的字符,使得 s 平衡 . 我们称 s 平衡的 当不存在下标 ...
- LeetCode 1568. 使陆地分离的最少天数(DFS)
文章目录 1. 题目 2. 解题 1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid ,其中 0 表示水,而 1 表示陆地. 岛屿由水平方向或竖直方向上相邻的 1 (陆地)连接形成. 如 ...
- amazon alexa_亚马逊使向自定义Alexa Skills添加声音变得更加容易
amazon alexa by Terren Peterson 由Terren Peterson 亚马逊使向自定义Alexa Skills添加声音变得更加容易 (Amazon has made it ...
- leetcode1568. 使陆地分离的最少天数(Python3、c++)
文章目录 leetcode1568. 使陆地分离的最少天数 方法:并查集 思路: 并查集: 求割点: 代码: Python3: cpp: 结果: leetcode1568. 使陆地分离的最少天数 给你 ...
- 周末加餐 使陆地分离的最少天数
给你一个由若干 0 和 1 组成的二维网格 grid ,其中 0 表示水,而 1 表示陆地.岛屿由水平方向或竖直方向上相邻的 1(陆地)连接形成. 如果恰好只有一座岛屿 ,则认为陆地是连通的 :否则, ...
最新文章
- 图解HTTP学习记录(一)
- OpenCV清除背景扣除background subtraction的实例(附完整代码)
- Mysql Workbench导出数据库时报 Unknown table ‘column_statistics‘ in information_schema (1109)
- aix内核是linux,查看Linux及AIX硬件信息方法总结
- Spring 容器简介
- 如何在定制化组件中实现并使用v-model
- python与办公自动化-python办公自动化:自动进行word文档处理和排版
- 服务器维修工程师个人简历,机械维修工程师个人简历模板精选
- 简道云、氚云、明道云们更讨中小企业欢心?
- R如何读取csv文件
- 阿里云天池机器学习训练营(Day7, Day8):机器学习算法(三):K近邻(k-nearest neighbors)初探
- rebase操作步骤
- 【提升coding能力】100道Python练习题11-20
- Python微信公众号教程基础篇——收发文本消息
- Chrome如何使用
- 解决麒麟V10上传文件乱码问题
- 12年时记录的一堆杂事
- androidstudio MultiDex慎用
- PAData:FCoin潜在受害者或超2000人,人均损失或超25 BTC
- 正则表达式: 以英文字母开头,只能包含英文字母、数字、下划线
热门文章
- android客户端中间人攻击,Android 中间人攻击
- php索引数组转键数组,PHP-Codeigniter:如何从指定索引转换数组值?
- cc2530定时器和捕获比较_STM32定时器PWM和输入捕获事件
- 计算几何-判断两条线段是否相交
- 计算机网络—CSMA/CA协议
- JAVA集合一:ArrayList和LinkedList
- n皇后---一维数组解法
- CTF之Web训练后篇2
- bzoj 3412: [Usaco2009 Dec]Music Notes乐谱
- (经典实用五大排序)选择排序,计数排序,冒泡排序,快速排序,插入排序