括号问题 谁践踏了优雅 2023-02-25 08:57 4阅读 0赞 # 括号问题 # 刷Leetcode时,遇到过许多括号问题,总结一下 ## 有效括号 ## 给定一个只包括 ‘(’,’)’,’\{’,’\}’,’\[’,’\]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 **示例 1:** 输入: "()" 输出: true **示例 2:** 输入: "()[]{}" 输出: true **示例 3:** 输入: "(]" 输出: false **示例 4:** 输入: "([)]" 输出: false **示例 5:** 输入: "{[]}" 输出: true 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ### 代码 ### class Solution { private HashMap<Character, Character> mappings; public boolean isValid(String s) { if(s==null||s.length()==0) return true; this.mappings = new HashMap<Character, Character>(); this.mappings.put(')', '('); this.mappings.put('}', '{'); this.mappings.put(']', '['); Stack<Character> charStack = new Stack<>(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); if (this.mappings.containsKey(ch)) { char topElement = charStack.empty() ? '#' : charStack.pop(); if (topElement != this.mappings.get(ch)) { return false; } }else{ charStack.push(ch); } } return charStack.isEmpty(); } } ## 括号生成 ## 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 **示例:** 输入:n = 3 输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/generate-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ### 代码 ### class Solution { List<String> res = null; public List<String> generateParenthesis(int n) { res = new ArrayList<>(); char [] Parenthesis = new char[2*n]; for (int i = 0; i < Parenthesis.length; i++) { Parenthesis[i]='('; } dfs(Parenthesis,1,0); return res; } void dfs(char[] Parenthesis,int index,int count){ if (count==Parenthesis.length/2) { res.add(String.valueOf(Parenthesis)); return; } for (int i = index; i < Parenthesis.length; i++) { if (i+1<(count+1)*2) continue; Parenthesis[i] = ')'; dfs(Parenthesis,i+1,count+1); Parenthesis[i]='('; } } } ## 最长有效括号 ## 给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。 **示例 1:** 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" **示例 2:** 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-valid-parentheses 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 /** * 困难级别,以后需要回看一下 */ public class longestValidParentheses { //动态规划 public int LongestValidParentheses(String s) { int maxans = 0; int []dp = new int[s.length()]; for (int i = 1; i < dp.length; i++) { if (s.charAt(i)==')') { if (s.charAt(i-1)=='(') { //刚好凑一对 dp[i]=(i>2 ? dp[i-2] : 0)+2; }else if(i - dp[i - 1] > 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; } maxans = Math.max(maxans, dp[i]); } } return maxans; } //使用栈的方法进行 public int LongestValidParentheses2(String s) { int maxans = 0; //将下标存进去 Stack<Integer> stack = new Stack<>(); stack.push(-1); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '(') { stack.push(i); } else { stack.pop(); if (stack.empty()) { stack.push(i); } else { maxans = Math.max(maxans, i - stack.peek()); } } } return maxans; } //贪心算法 public int longestValidParentheses3(String s) { int left = 0, right = 0, maxlength = 0; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '(') { left++; } else { right++; } if (left == right) { maxlength = Math.max(maxlength, 2 * right); } else if (right > left) { left = right = 0; } } left = right = 0; for (int i = s.length() - 1; i >= 0; i--) { if (s.charAt(i) == '(') { left++; } else { right++; } if (left == right) { maxlength = Math.max(maxlength, 2 * left); } else if (left > right) { left = right = 0; } } return maxlength; } public static void main(String[] args) { longestValidParentheses l = new longestValidParentheses(); String s = "()(())"; System.out.println(l.LongestValidParentheses(s)); } }
相关 1792: 括号配对问题 1792: 括号配对问题 时间限制: 3 Sec 内存限制: 64 MB 提交: 185 解决: 84 您该题的状态:已完成 \[[提交][Link 1]\] 女爷i/ 2024年02月18日 22:26/ 0 赞/ 69 阅读
相关 有效的括号--括号匹配问题--Java 有效的括号–括号匹配问题–Java 代码如下:—解析在代码里 import java.util.ArrayList; / Crea 今天药忘吃喽~/ 2023年05月28日 06:59/ 0 赞/ 22 阅读
相关 括号问题 括号问题 刷Leetcode时,遇到过许多括号问题,总结一下 有效括号 给定一个只包括 ‘(’,’)’,’\{’,’\}’,’\[’,’\]’ 的字符串,判断字符 谁践踏了优雅/ 2023年02月25日 08:57/ 0 赞/ 5 阅读
相关 括号匹配问题 include <stdio.h> include <stdlib.h> include <string.h> char st1[105]; 布满荆棘的人生/ 2022年12月12日 13:43/ 0 赞/ 159 阅读
相关 括号配对问题 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个 迈不过友情╰/ 2022年08月11日 16:54/ 0 赞/ 202 阅读
相关 括号配对问题 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都 傷城~/ 2022年08月02日 01:23/ 0 赞/ 187 阅读
相关 括号配对问题 括号配对问题,其实是栈的一个应用,很常见也很普通。 栈是最常见的和最重要的数据结构之一,用途非常广泛。它是一种只能在一端进行插入或删除操作的线性表,括号配对是栈的链式储存及 港控/mmm°/ 2022年06月16日 07:30/ 0 赞/ 278 阅读
相关 括号匹配问题 include<string.h> include <malloc.h> include <stdio.h> define MaxSize 10 电玩女神/ 2022年05月26日 03:23/ 0 赞/ 398 阅读
相关 括号匹配问题 题意: 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据 港控/mmm°/ 2022年01月26日 11:29/ 0 赞/ 270 阅读
还没有评论,来说两句吧...