当前位置:网站首页>[Li Kou brush questions] 32 Longest valid bracket
[Li Kou brush questions] 32 Longest valid bracket
2022-07-06 21:20:00 【Li xiaoenzi】
Catalog
Method 1 :
subject :
Give you one that only contains '(' and ')' String , Find the longest effective ( The format is correct and continuous ) The length of the bracket substring .

Method 1 :
Their thinking :
Utilization stack , I learned to use the stack to judge that a contains only '(' and ')' Whether the string of is parenthesized , The solution to that problem is , Traversing the entire string , If it's an open parenthesis, it's on the stack , Is the right parenthesis ① Determine whether the stack has an open bracket and pop up an open bracket ,② If the stack is empty, then false, If all characters are traversed , If there are elements in the stack, they are false, Otherwise true.
Use this idea , Add an array of tags arr, Initialize all elements to 1, What is stored in the stack is the array subscript ( Character index ). Traversing the entire string , If it is an open parenthesis, the index subscript (i) Join the stack , If it is a right parenthesis, judge whether the element in the stack is empty and if not, pop up , And mark the elements corresponding to the array arr[stack.pop()] And the tag array element corresponding to the current subscript arr[i] Set as 0.
Finally, determine the tag array arr The longest continuous 0 That's all right. .
Code :
class Solution {
public int longestValidParentheses(String s) {
// Find the longest valid bracket
// Stack
// Use the stack to mark whether the left and right parentheses are valid , The contents of the stack are stored with subscripts i
Stack<Integer> stack = new Stack<>();
int[] valid = new int[s.length()];
for(int i = 0; i < s.length(); i++){
valid[i] = 1;
}
for(int i = 0; i < s.length();i++){
if(s.charAt(i) == '(') stack.push(i);
else{
if(!stack.empty()){
valid[i] = 0;
valid[stack.pop()] = 0;
}
}
}
int res = 0,count = 0;
for(int i = 0; i < s.length();i++){
if(valid[i] == 1) {
count = 0;
}else{
count++;
}
res = Math.max(res,count);
}
return res;
}
}Method 2 :
Their thinking :
Dynamic programming , utilize dp[i] Express By subscript i The length of the longest valid bracket at the end of the character . take dp The array is all initialized to 0. A valid substring must be in ')' ending , With '(' The ending substring corresponds to dp The value must be 0. So we just need to solve it to ')' stay dp The value of the corresponding position in the array . So go through the string from front to back , solve dp value .
①s.charAt(i)=')' And s.charAt(i-1)='(', String is "...()" be dp[i] = dp[i-2]+2.
② If s.charAt(i) = ')' And s.charAt(i-1) = ')', Like strings "...))"->"()(())",
If s.charAt(i - dp[i - 1] - 1)='(', Then the effective bracket length increases the length 2,i The longest valid bracket length of position pair is i-1 The longest bracket length of the position plus the new 2, But you have to Be careful ,i − dp[i − 1] − 1 and i Form a valid pair of parentheses , This will be a paragraph Independent valid parenthesis sequence , If the previous subsequence is shaped like (...)(...) This sequence , Then the longest valid bracket length of the current position needs to add this paragraph . for example :()(()), The red one on the left and The green one on the right Is a sequence of two independent valid parentheses . So the state transfer equation is :dp[i] = dp[i - 1] + 2 + dp[i - dp[i - 1] -2 ].
Icon :

Also note the boundary value , Because we need to use it dp[ i - 2 ], also dp[ i - dp[ i - 1 ] - 2 ], To judge .
Code :
class Solution {
public int longestValidParentheses(String s) {
// Dynamic programming
//dp[i] Denotes the following i The length of the longest valid bracket at the end of the character
int res = 0;
int[] dp = new int[s.length()];
for(int i = 1;i < s.length();i++){
if(s.charAt(i) == ')'){
if(s.charAt(i-1) == '('){
if(i >= 2) dp[i] = dp[i - 2] + 2;
else dp[i] = 2;
}else if(i - dp[i - 1] > 0 && s.charAt(i - dp[i - 1] - 1) == '('){
if(i - dp[i - 1] >= 2) dp[i] = dp[i - 1] + dp[i - dp[i - 1] - 2] + 2;
else dp[i] = dp[i - 1] + 2;
}
}
res = Math.max(res,dp[i]);
}
return res;
}
}Method 2: look at the analysis , Not good at writing Dynamic Planning , Next time, find an opportunity to practice the topic of Dynamic Planning .
边栏推荐
- 【mysql】游标的基本使用
- 首批入选!腾讯安全天御风控获信通院业务安全能力认证
- No Yum source to install SPuG monitoring
- for循环中break与continue的区别——break-完全结束循环 & continue-终止本次循环
- This year, Jianzhi Tencent
- KDD 2022 | 通过知识增强的提示学习实现统一的对话式推荐
- 代理和反向代理
- Le langage r visualise les relations entre plus de deux variables de classification (catégories), crée des plots Mosaiques en utilisant la fonction Mosaic dans le paquet VCD, et visualise les relation
- Word bag model and TF-IDF
- Why does MySQL index fail? When do I use indexes?
猜你喜欢

数据湖(八):Iceberg数据存储格式

Manifest of SAP ui5 framework json

SAP UI5 框架的 manifest.json

Study notes of grain Mall - phase I: Project Introduction
![[in depth learning] pytorch 1.12 was released, officially supporting Apple M1 chip GPU acceleration and repairing many bugs](/img/66/4d94ae24e99599891636013ed734c5.png)
[in depth learning] pytorch 1.12 was released, officially supporting Apple M1 chip GPU acceleration and repairing many bugs

【论文解读】用于白内障分级/分类的机器学习技术

Internet News: Geely officially acquired Meizu; Intensive insulin purchase was fully implemented in 31 provinces
Why does MySQL index fail? When do I use indexes?

Data Lake (VIII): Iceberg data storage format

ICML 2022 | Flowformer: 任务通用的线性复杂度Transformer
随机推荐
Reference frame generation based on deep learning
Absolute primes (C language)
R语言做文本挖掘 Part4文本分类
In JS, string and array are converted to each other (II) -- the method of converting array into string
The most comprehensive new database in the whole network, multidimensional table platform inventory note, flowus, airtable, seatable, Vig table Vika, flying Book Multidimensional table, heipayun, Zhix
Forward maximum matching method
038. (2.7) less anxiety
Proxy and reverse proxy
el-table表格——获取单击的是第几行和第几列 & 表格排序之el-table与sort-change、el-table-column与sort-method & 清除排序-clearSort
面试官:Redis中有序集合的内部实现方式是什么?
监控界的最强王者,没有之一!
966 minimum path sum
document. Usage of write () - write text - modify style and position control
审稿人dis整个研究方向已经不仅仅是在审我的稿子了怎么办?
【力扣刷题】32. 最长有效括号
What are RDB and AOF
ICML 2022 | flowformer: task generic linear complexity transformer
Thinking about agile development
OSPF multi zone configuration
Is this the feeling of being spoiled by bytes?