当前位置:网站首页>Leetcode32 longest valid bracket (dynamic programming difficult problem)
Leetcode32 longest valid bracket (dynamic programming difficult problem)
2022-07-06 03:59:00 【ajdhfla】
Give you one that only contains '(' and ')' String , Find the longest effective ( The format is correct and continuous ) The length of the bracket substring .
Example 1:
Input :s = "(()"
Output :2
explain : The longest valid bracket substring is "()"
Example 2:
Input :s = ")()())"
Output :4
explain : The longest valid bracket substring is "()()"
Example 3:
Input :s = ""
Output :0
source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/longest-valid-parentheses
One : Violence solution ( Easy to understand but with high time complexity )
The easiest way to think about this problem is to find the length of the longest valid bracket substring ending in each character in the string , When I think of this, I think of using dynamic programming , But the state transition equation of this problem is not well determined , I will write the solution of dynamic programming below . The simplest way to find the longest substring ending in each character is to solve it violently through the stack , The specific method is to traverse forward from the current character , Until it doesn't meet the conditions .
Here are a few things to pay attention to :
1. Because this is traversal from back to front , So what is different from usual is that when you encounter the right parenthesis, it will be put on the stack , Stack when encountering the left bracket ;
2. How to determine the conditions for breaking the cycle : When the stack is empty and the next character in the stack is ‘(' when ;
3. In the general question of judging whether it is valid , If the stack is not empty after traversal, it is directly determined that it is invalid , But this problem may happen :"))()", If you traverse forward from the last character , It is partly effective , So how to exclude the invalid part in the front . I set up a temp Variable , Except at the beginning, if the stack is empty, it indicates that there is already a set of valid parentheses , At this point through tmep To record its length . Then continue to traverse forward , Because there may be valid parentheses after it , When the stack is not empty at the end of traversal, it will return directly temp, That is, the previous valid part .
class Solution {
public int longestValidParentheses(String s) {
if (s.length() == 0) return 0;
int ans = 0;
int[] dp = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
}
return ans;
}
public int a (String s, int x) {
Deque<Character> stack = new LinkedList<>();
int res = 0;
int temp = 0;
for (int i = x; i >= 0; --i) {
if (stack.isEmpty() && i != s.length() - 1 && s.charAt(i + 1) == '(') temp = res;
if (stack.isEmpty() && s.charAt(i) == '(') break;
else if (s.charAt(i) == ')') stack.addLast(s.charAt(i));
else if (s.charAt(i) == '(') {
stack.pollLast();
}
res++;
}
if(!stack.isEmpty()) return temp;
return res;
}
}Two : Dynamic programming
The key of dynamic programming is to determine the state transition equation , The same idea as above requires the length of the longest valid bracket substring ending in each character in the string , And recorded in the array dp[] in , The idea is as follows :
Traversal string
1. If the current character is '(' when , Cannot form a valid bracket substring that ends with the current character ;
2. If the current character is ')' when :
2.1 i-1 The character of the position is ’(', At this time, this character forms a valid bracket with the previous character , Directly to dp[i-2]+2 that will do , But consider i-2 Is it greater than 0;
2.2 i-1 The character of the position is ')', At this point, if you want to form a valid string "..(.....))" The following conditions must be met :
1.dp[i - 1] Greater than 0, Because the middle of these two brackets must also be valid brackets , A set of parentheses outside a set of invalid parentheses is also invalid ;
2.i - dp[i - 1] - 1 Greater than or equal to zero ,i - dp[i - 1] - 1 namely i The position of the corresponding left parenthesis ;
3. The position of the corresponding left bracket should be '(' Otherwise, invalid parentheses ;
4. After meeting the above conditions , It can be judged that dp[i] Greater than or equal to dp[i - 1] + 2, Because this may happen :"()(())", In this example, when dp[5]=2,dp[6]=6, This is because after connecting the left bracket of the corresponding position , If there are valid parentheses on the left of the left parenthesis, they should be counted together .
class Solution {
public int longestValidParentheses(String s) {
int ans = 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] - 1>= 0 > 0 && s.charAt(i - dp[i - 1] - 1) == '(') {
dp[i] = dp[i - 1] + ((i - dp[i - 1]) >= 2 ? dp[i - dp[i - 1] - 2] : 0) + 2;
}
ans = ans > dp[i] ? ans : dp[i];
}
}
return ans;
}
}
边栏推荐
- Quick sort function in C language -- qsort
- Data analysis Seaborn visualization (for personal use)
- Chinese brand hybrid technology: there is no best technical route, only better products
- ESP32(基于Arduino)连接EMQX的Mqtt服务器上传信息与命令控制
- [Massey] Massey font format and typesetting requirements
- 在字节做测试5年,7月无情被辞,想给划水的兄弟提个醒
- 阿里测试师用UI自动化测试实现元素定位
- Differential GPS RTK thousand search
- Take you to wechat applet development in 3 minutes
- Do you know cookies, sessions, tokens?
猜你喜欢
![[introduction to Django] 11 web page associated MySQL single field table (add, modify, delete)](/img/8a/068faf3e8de642c9e3c4118e6084aa.jpg)
[introduction to Django] 11 web page associated MySQL single field table (add, modify, delete)

C#(三十一)之自定义事件

RT thread -- FTP of LwIP (2)

User experience index system

【可调延时网络】基于FPGA的可调延时网络系统verilog开发

在 .NET 6 中使用 Startup.cs 更简洁的方法

Esp32 (based on Arduino) connects the mqtt server of emqx to upload information and command control

C (XXIX) C listbox CheckedListBox Imagelist

C#(二十八)之C#鼠标事件、键盘事件

cookie,session,Token 这些你都知道吗?
随机推荐
Facebook等大厂超十亿用户数据遭泄露,早该关注DID了
Factors affecting user perception
Prime protocol announces cross chain interconnection applications on moonbeam
简易博客系统
【FPGA教程案例11】基于vivado核的除法器设计与实现
Error 1045 (28000): access denied for user 'root' @ 'localhost' (using password: no/yes
pd. to_ numeric
MySQL about self growth
[prediction model] difference method model
自动化测试的好处
Conditionally [jsonignore]
判断当天是当月的第几周
Cf464e the classic problem [shortest path, chairman tree]
Recommended papers on remote sensing image super-resolution
Basic knowledge of binary tree, BFC, DFS
在 .NET 6 中使用 Startup.cs 更简洁的方法
An article will give you a comprehensive understanding of the internal and external components of "computer"
Python book learning notes - Chapter 09 section 01 create and use classes
C language -- structs, unions, enumerations, and custom types
User experience index system