当前位置:网站首页>[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 .
边栏推荐
- 启动嵌入式间:资源有限的系统启动
- 快讯:飞书玩家大会线上举行;微信支付推出“教培服务工具箱”
- 'class file has wrong version 52.0, should be 50.0' - class file has wrong version 52.0, should be 50.0
- 966 minimum path sum
- Three schemes of SVM to realize multi classification
- Start the embedded room: system startup with limited resources
- Yyds dry inventory run kubeedge official example_ Counter demo counter
- R language for text mining Part4 text classification
- 3D face reconstruction: from basic knowledge to recognition / reconstruction methods!
- 互联网快讯:吉利正式收购魅族;胰岛素集采在31省全面落地
猜你喜欢
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
[redis design and implementation] part I: summary of redis data structure and objects
Manifest of SAP ui5 framework json
2022菲尔兹奖揭晓!首位韩裔许埈珥上榜,四位80后得奖,乌克兰女数学家成史上唯二获奖女性
MLP (multilayer perceptron neural network) is a multilayer fully connected neural network model.
3D人脸重建:从基础知识到识别/重建方法!
[interpretation of the paper] machine learning technology for Cataract Classification / classification
Performance test process and plan
跨分片方案 总结
OneNote in-depth evaluation: using resources, plug-ins, templates
随机推荐
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
Fastjson parses JSON strings (deserialized to list, map)
对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
MySQL - 事务(Transaction)详解
Nodejs tutorial expressjs article quick start
Start the embedded room: system startup with limited resources
ACdreamoj1110(多重背包)
How to implement common frameworks
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
SAP UI5 框架的 manifest.json
Nodejs教程之让我们用 typescript 创建你的第一个 expressjs 应用程序
2022菲尔兹奖揭晓!首位韩裔许埈珥上榜,四位80后得奖,乌克兰女数学家成史上唯二获奖女性
[MySQL] basic use of cursor
Is it profitable to host an Olympic Games?
【深度学习】PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug
Set up a time server
Reviewer dis's whole research direction is not just reviewing my manuscript. What should I do?
【mysql】游标的基本使用
Divide candy
15million employees are easy to manage, and the cloud native database gaussdb makes HR office more efficient