Leetcode 921. 使括号有效的最少添加

给定一个由 ‘(‘ 和 ‘)‘ 括号组成的字符串 S,我们需要添加最少的括号( ‘(‘ 或是 ‘)‘,可以在任何位置),以使得到的括号字符串有效。

从形式上讲,只有满足下面几点之一,括号字符串才是有效的:

  • 它是一个空字符串,或者
  • 它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者
  • 它可以被写作 (A),其中 A 是有效字符串。

给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。

示例 1:

输入:"())"
输出:1

示例 2:

输入:"((("
输出:3

示例 3:

输入:"()"
输出:0

示例 4:

输入:"()))(("
输出:4

提示:

  1. S.length <= 1000
  2. S 只包含 ‘(‘ 和 ‘)‘ 字符。

思路:简单的栈引用,如果是(就入栈,不是就看一下栈是否为空,如果不为空,则ans-2

 1 class Solution {
 2 public:
 3     int minAddToMakeValid(string S) {
 4         int ans=S.length();
 5         char str[1010];
 6         strcpy(str, S.c_str());
 7         stack<char>st;
 8
 9         for(int i=0;i<S.length();i++)
10         {
11
12             if(str[i]==‘(‘)
13                 st.push(str[i]);
14             else{
15
16                 if(!st.empty())
17                 {
18                     ans-=2;
19                 st.pop();
20                 }
21
22
23             }
24             //printf("%d\n",i);
25         }
26 //printf("%d\n",11);
27         return ans;
28     }
29 };

原文地址:https://www.cnblogs.com/tijie/p/9898808.html

时间: 2024-10-15 18:52:54

Leetcode 921. 使括号有效的最少添加的相关文章

hdu4612 无向图中任意添加一条边后使桥的数量最少 / 无向图缩点+求树的直径

题意如上,含有重边(重边的话,俩个点就可以构成了边双连通). 先缩点成树,在求数的直径,最远的连起来,剩下边(桥)的自然最少.这里学习了树的直径求法:第一次选任意起点U,进行bfs,到达最远的一个点v(level最深)该点必然是树的直径的一个端点,,再从该点出发,bfs,到最深的一点,该点深度就是直径.(证明:先假设u,是直径上一点,S,T是直径的端点,设v!=t,则有(V,U)+(U,S)>(T,U)+(U,S),矛盾,故t=v:若u不是直径上一点,设u到直径上的一点为x,同理易证. 最后 缩

给你一串括号,去掉最少的括号,使之合法化,输出合法化的长度。

按照题目的四个条件去找就行了,小问题的解可以求出答题的解 dp[i][j]=max(dp[i][k]+dp[k+1][j],dp[i-1][j-1]+2) 1 #include"iostream" 2 #include"cstring" 3 #include"cstdio" 4 using namespace std; 5 int main() 6 { 7 char str[150]; 8 while(scanf("%s",s

假如某人年薪100万,如何分配月发和年终奖会使其纳税金额最少

目的:假如某人年薪100万,如何分配月发和年终奖会使其纳税金额最少 规则:月发工资纳税计算方法 级数 工资含税级距 税率 速算扣除数 1 0-1500 3% 0 2 1500-4500 10% 105 3 4500-9000 20% 555 4 9000-35000 25% 1005 5 35000-55000 30% 2755 6 55000-80000 35% 5505 7 80000以上 45% 13505 纳税公式为:(月工资金额-3500)*对应税率-速算扣除数 假如某员工月发金额为5

hdoj 2767 Proving Equivalences【求scc&amp;&amp;缩点】【求最少添加多少条边使这个图成为一个scc】

Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4263    Accepted Submission(s): 1510 Problem Description Consider the following exercise, found in a generic linear algebra t

POJ 1141 输出正确的括号匹配(最少添加)

Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32174   Accepted: 9291   Special Judge Description Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular sequence. 2. If S is a re

2017-5-14 湘潭市赛 Parentheses 转化思想+贪心 使括号序列合法的最小花费。满足前面左括号的数量&gt;=有括号的数量。

Parentheses Accepted : 8 Submit : 19 Time Limit : 3000 MS Memory Limit : 65536 KB Parentheses Bobo has a very long sequence divided into n consecutive groups. The i-th group consists of li copies of character ci where ci is either "(" or ")

20/32/22/856/301/921 Parentheses 括号匹配或者生成题

20. https://leetcode.com/problems/valid-parentheses/description/ 32. https://leetcode.com/problems/longest-valid-parentheses/description/ 22. https://leetcode.com/problems/generate-parentheses/description/ 856. https://leetcode.com/problems/score-of-

【Leetcode】使数组唯一的最小增量(每日一题)

题目链接:使数组唯一的最小增量 题意:给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1. 返回使 A 中的每个值都是唯一的最少操作次数. 题解: 1.暴力sort.O(nlogn).排序以后,如果当前数字<=前一个数字,那么就把当前的数字变成前一个数字+1. 增量就是A[i-1]+1-A[i].遍历以后的结果就是要求的最小增量.跑了80ms 2.用一个数组表示hash.空间换时间.O(n). 我们对hash数组进行移动操作,每次对hash[i]>1的数字进行操作,只

【LeetCode题目记录-7】为完全二叉树添加层指针

Populating Next Right Pointers in Each Node Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } Populate each next pointer to point to its next right node. If there is no next right node, the next