有效的括号(java)腾讯云开发者社区

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。

示例1:输入:s = “()”输出:true

示例2:输入:s = “()[]{}”输出:true

示例3:输入:s = “(]”输出:false

示例4:输入:s=“({[]})”输出:true

题目分析:题目中所说的有效括号仅指字面意义上的有效,即不考虑数学意义上括号的意义:也就是说,只要括号正确闭合就行,类似 ([])、({})、[{}]、([{}]) 等也符合题目中有效括号的定义。例如示例4输出为true

思路1:对于任何有效的初始括号字符串均至少含有()、{}、[]三对括号中的一对,故使用contains()循环判断是否含有这三对括号,若有则使用replace()删除,最终有效字符串会删减为空串,将最终的字符串使用equals(“”)比较,为空串则有效,反之无效。该思路是我自己解题的思路,但由于在循环内调用函数,导致时间复杂度和空间复杂度高,性能差,代码见下方

解题步骤如下:1、whie循环,以字符串是否含有()、[]、{}三对括号为循环条件2、while循环内,以空字符“”替换字符串中的()、[]、{}3、循环以字符串内不含有三对括号结束4、判断最终字符串是否为空串,为空则true,反之为false

思路2:使用栈,利用stack的后进先出的特性,遍历括号字符串。若字符串以(、[、{开头,且从左至右遍历过程中,遇到(、[、{则向stack栈中压入对应的右括号,遇到)、]、}则弹出栈顶元素并与当前字符比较,相同则继续,不同则结束返回false。若字符串以)、]、}三者之一开头,则为无效字符串,以栈空为条件结束返回false该思路借鉴了他人的题解,很强大

解题步骤1、声明一个空栈2、使用toCharArray()将字符串转为字符数组,并在for循环中遍历3、循环内:若该字符对应(、[、{则向栈中压入对应的右括号;反之则弹出栈顶元素并判断是否与当前字符相同且栈是否为空栈。若为空栈或与栈顶元素不同,则返回false4、循环结束后,判断栈是否为空,为空则有效;反之无效。

该题总共提交了五次化,花费了挺多时间,前四次依照自己的解题思路,前三次出错,第四次成功但占用时间空间多,第五次为借鉴他人思路优化解题。

THE END
0.括号匹配算法给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法,判断该字符串是否有效,即字符串中括号是否匹配。括号匹配要求括号必须以正确的顺序配对,如“{ [ ] ( ) }”或“[ ( { } [ ] ) ]” 等为正确的格式,而“[ ( ] ) jvzquC41dnuh0lxfp0tfv8|zdokmk|p{1cxuklqg1fkucrqu17727>;22
1.给定一个字符串,字符串中只有'(',')','?'三种字符,'?'为((? 输出: 16 解析:1/2 * 2^5; 思路: 这个问题的核心是求出所有可能的括号序列中,合法闭合括号对数的**期望值 $ E $**,然后计算 $ E \times 2^n \mod (10^9 + 7) $。 🧠 思路简述 我们不能枚举所有可能的字符串(指数爆炸),而是使用动态规划来高效地计算所有合法括号序列中,括号对数的总和jvzquC41ygtlw7hufp4og}4cpu}ft89x9t}ul?>w
2.LeetCode678.有效的括号字符串GarrettWale678. 有效的括号字符串 题目详情 给定一个只包含三种字符的字符串:(,)和*,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号(必须有相应的右括号)。 任何右括号)必须有相应的左括号(。 左括号(必须在对应的右括号之前)。 jvzquC41yy}/ewgnqiy/exr1Icxsg}yYcnk0r8682:>9:>3jvor
3.LeetCode678.有效的括号字符串(栈)腾讯云开发者社区给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 ) 必须有相应的左括号 ( 。 左括号 ( 必须在对应的右括号之前 )。 * 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。 jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk03?;27;<
4.2022102022-10-13:给定一个只包含三种字符的字符串:( 、) 和 *, 写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 ) 必须有相应的左括号 ( 。 左括号 ( 必须在对应的右括号之前 )。 可以被视为单个右括jvzquC41yy}/ewgnqiy/exr1oquohmi1r1785B9:3;4ivvq
5.678.有效的括号字符串678. 有效的括号字符串 - 给你一个只包含三种字符的字符串,支持的字符类型分别是 '('、')' 和 '*'。请你检验这个字符串是否为有效字符串,如果是 有效 字符串返回 true 。 有效 字符串符合如下规则: * 任何左括号 '(' 必须有相应的右括号 ')'。 * 任何右括号 ')' 必须jvzquC41ngkuexig0et0r{tdngst1fnkf3qc{jpvjktk|2uvtooi8iguexjr}nqp1Eqcpj?4
6.ValidParentheses·leetcode笔记·看云这一题是典型的使用压栈的方式解决的问题,解题思路如下: 计数i = 0 根据字符指针取出括号字符串的当前字符,如果当前字符为空,跳到5 如果当前字符是左括号( (]}这三种 ),直接压入栈 如果当前字符是右括号( )]}这三种 ),从栈中弹出一个元素,弹出的元素如果和当前字符匹配,i++,回到2;否则,返回false jvzquC41yy}/mjsenq{e0ls1fkmfu}4nggzdqmjqlu522<623
7.2022102022-10-13:给定一个只包含三种字符的字符串:( 、) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符。一个空字 jvzquC41zkk/kwkqs0io1jwvkerf1<6;7d=94mi:e4k9eA>gd4<9hl
8.有效的括号字符串文章介绍了如何通过动态规划的方法解决有效括号字符串问题,定义dp数组跟踪子串的有效性,状态转移方程涉及单个字符、相邻括号匹配以及星号的特殊处理。 有效的括号字符串 【问题描述】 给你一个只包含三种字符的字符串,支持的字符类型分别是 ‘(’、‘)’和‘*’。请你检验这个字符串是否为有效字符串,如果是有效字符串jvzquC41dnuh0lxfp0tfv8|gkzooa=53858548ftvkimg8igvcomu865448:6?7
9.的括号字符串java给定一个只包含3种字符的字符串文章讲述了如何使用动态规划和栈解决检查包含括号和星号的字符串是否有效的问题。动态规划方法的时间复杂度较高,而栈方法更高效,能以O(n)的时间复杂度和O(n)的空间复杂度完成任务。两种方法都考虑了星号可以视为右括号或空字符串的特性。 给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是jvzquC41dnuh0lxfp0tfv8|gkzooa=52498968ftvkimg8igvcomu864;8:23B7
10.202210如何判断包含括号和星号的字符串是否有效? 括号和星号组成的字符串怎样算有效? 如何用函数验证只有括号和星号的字符串有效性? 2022-10-13:给定一个只包含三种字符的字符串:( ,)和 *, 写一个函数来检验这个字符串是否为有效字符串.有效字符串具有如下规则: 任何左括号 (必须有相应的右括号 ). 任何右括号 )jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c{ykenk04:8883?
11.LeetCode678.有效的括号字符串本文介绍了如何检查包含括号和星号的字符串是否有效,提供了两种解法:栈和贪心算法。有效字符串需遵循特定规则,如括号匹配、星号可视为左右括号或空字符串等。通过遍历字符串并维护栈的状态或计算未匹配左括号的数量,可以判断字符串是否有效。 题目 给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符jvzquC41dnuh0lxfp0tfv8lwzkt`f~~kp1gsvrhng1jfvjnnu1737<;6569
12.数据结构3.2/*2编写程序,读入一个字符串,其中包含{}、[]、()三种括号/*2编写程序,读入一个字符串,其中包含{}、[]、()三种括号,检查该字符串中的括号是否正确匹配。提示:依次读入每个字符。(1)若遇到左括号,压栈。(2)若遇到右括号,检查栈顶的左括号:若与右括号匹配,则弹出栈顶左括号;若不匹配,说明匹配错误;若栈中无内容,说明匹配错误。(3)若遇到其他符号,忽略之。(4)若字jvzquC41dnuh0lxfp0tfv8vsa6<19<6841gsvrhng1jfvjnnu171;>5;94?
13.给定一个字符串,仅由a,b,c3种小写字母组成。给定一个字符串,仅由a,b,c 3种小写字母组成。 本文介绍了一种针对特定字符串的缩减算法,该算法通过一系列替换规则来不断缩短字符串的长度,直至达到最简状态。输入字符串由a、b、c三种字符组成,通过定义的替换规则,可以有效地减少字符串长度。 packagecom.boco.study;jvzquC41dnuh0lxfp0tfv8kwfc~jpp4ctvodnn4fgvgjn|4327<77<6
14.力扣20有效的括号暴力分支判断哈希表算法力扣20 - 有效的括号【暴力、分支判断、哈希表】 有关这道力扣上的题,通过反复思考和资料查询,为大家总结出了这三种解法,分别是暴力解法、分支判断以及哈希表,在 LeetCode 上都可以 AC @TOC 力扣题目链接 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。jvzquC41zkk/kwkqs0io1jwvkerf1
15.腾讯音乐娱乐后台一面(二面已挂笔经面经给定一个字符串,其中的字符只包含三种括号:花括号{}、中括号[]、圆括号(),即它仅由 "()[]{}"这六个字符组成。设计算法,判断该字符串中的括号是否匹配。括号匹配要求括号必须以正确的顺序配对,如"{[]()}"或"[({}[])]" 等为正确的格式,而"[(])"或"{[()}"或"({}])"均为不正确的格式 第二jvzquC41ces/px|eqfks0lto1fote~xu1;828?<
16.有一个字符串,这个字符串呢,只包含左右小括号,左右中括号和左右大文章浏览阅读76次。当然可以,这个问题涉及的是字符串匹配和括号平衡的问题,通常也称为括号表达式校验。你需要编写一个函数,例如在Python中可以用栈(Stack)的数据结构来解决: ```python def isValid(s): stack = [] pairs = {')': '(', ']': '['jvzquC41ygtlw7hufp4og}4cpu}ft87xm:>n8|zq
17.酷町堂:1205一个字符串,里面只包含"(",")","[","]"四种符号,请问添加最少多少个括号使得括号表达式是正确的 如:[]是正确的 ([])[]是正确的 ((]是不正确的 ([)]是不正确的 jvzquC41ygtec7hqfkthvjsi0eun1zzguvopp|4325<21
18.202109取出栈顶元素,看看栈顶元素和括号类型是否匹配 a)如果匹配,就把栈顶元素出栈,继续取下一个字符 jvzquC41enuvf7ygpekov7hqo1jfxnqqrgx0c|p146>37A
19.如何判断一个字符串是否含有并只含有某3个字符因此,我们可以分两种情况: 情况1:给定三个具体的字符(比如'a','b','c'),判断字符串是否只由这三个字符组成(可以重复,但只能出现这三个字符),并且必须包含这三个字符(至少出现一次)? 情况2:判断字符串是否由恰好三个不同的字符组成(不一定指定是哪三个)?jvzquC41ygtlw7hufp4og}4cpu}ft8oie:6r3€;x
20.栈的应用:括号匹配题目:给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法,判断该字符串是否匹配。括号匹配要求括号必须以正确的顺序配对,如“{ [ ] ( ) }”或“[ ( { } [ ] ) ]” 等为正确的格式,而“[ ( ] )”或“{ [jvzquC41yy}/lrfpuj{/exr1r17f9@=e2c>9ck
21.IOS算法(中级篇)有效的括号字符串给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:①任何左括号 ( 必须有相应的右括号 )。②任何右括号 jvzquC41yy}/lrfpuj{/exr1r1;c3k8;6g>4em
22.有效的括号字符串0.4582021.09.12 23:47:22字数123阅读1,618 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-parenthesis-string 题目描述: 给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。任何右括号jvzquC41yy}/lrfpuj{/exr1r1>dfk5599id6l
23.有效的括号字符串给定一个只包含三种字符的字符串:(,)和 * ,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 ) 任何右括号 ) 必须有相应的左括号 ( 左括号 ( 必须在对应的右括号之前 ) 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串 jvzquC41dnuh0lxfp0tfv8Hjgpetj~ddev5bt}neng5eg}fknu5249778:;3
24.(LeetCode)有效的括号字符串本文介绍了一种算法,用于验证包含括号和星号的字符串的有效性。提供了两种方法:一种使用栈来跟踪左括号和星号的位置;另一种采用数学方法,通过计算左括号与星号的数量来确定字符串是否有效。 给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: jvzquC41dnuh0lxfp0tfv8~wgjgp3:9585726B4ctvodnn4fgvgjn|4345>78B;5
25.给定一个字符串s,字符串s只包含以下三种字符,请你判断s是不是一个给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 ) 必须有相应的左括号 ( 。 左括号 ( 必须在对应的右括号之前 )。 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。 jvzquC41dnuh0lxfp0tfv8|gkzooa=7;786598ftvkimg8igvcomu86287983:9
26.可以被视为单个右括号')',或单个左括号'(',或一个空字符串给定一个只包含三种字符的字符串:(,)和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 ) 必须有相应的左括号 ( 。 左括号 ( 必须在对应的右括号之前 )。 *可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。 jvzquC41dnuh0lxfp0tfv8oss3861jwvkerf1mjvckrt1:7249<5;;