leetcode204,leetcode01
problem
给定一个仅包含字符(,), { , } ,[和]的字符串,确定输入字符串是否有效。
在以下情况下,输入字符串有效:
左括号必须用相同类型的括号括起来。
左括号必须以正确的顺序结束。
请注意,空字符串也被视为有效。
solution
i:这是我再次完成这个题目,现在记得最深的方法就是替换,因为有效括号的成对性,一定会被"()",不断替换掉,直到为空(注意为空的情况)
python
类解决方案:def isValid(self,s: str) - bool: while(()在s中或 {} 在s中或[]):# s . replace((),)这里再用替换的时候,忘记了,字符串是不可变类型,所以要重新符给一个变量s=s.replace((), )s=s.replace({} , )s=s.replace([], )返回s==java
类解决方案{公共布尔值有效(字符串s){//这里爪哇岛我没有找到提供查找子字符串是否在线中的函数,那么就循环长度/2次int length=s . length()。如果(长度%1==1 ){返回false} if(length==0){返回true } for(int I=0;I长度/2;i) { s=s.replace((), );s=s.replace({} , );s=s.replace([], );if (s.isEmpty()) {返回true} }返回false}}ii:
使用堆栈,遇到(,{,[入栈,遇到),},],就出栈,比较是不是成对的,因为有效的括号一定会至少有一个(),{},[]子字符串存在,当替换后子字符串如此关系也成立
注意空栈问题,还有最后很有可能不为空,在验证的时候,多设计一些特殊测试用例
再看代码如下解题时,那些评论很是中肯,都是我没有观察到的特性
如果栈的深度大于字符串长度的1/2,就返回错误。因为当出现这种情况的时候,即使后面的全部匹配,栈也不会为空。先增加一个字符串长度的奇偶判断长度()1奇数直接返回假python
类解法:def isValid(self,s:str)-bool:stack=[]for I in s:if I==(或我=={ 或I==[:stack。附加(I)else:如果不是堆栈:返回False k=stack.pop() if k i!=()和k i!=[]和k i!={} :如果堆栈返回错误:返回错误的返回falsejava
class Solution { public boolean is valid(String s){ int length=s . length();Stack字符Stack=new Stack();for(int I=0;我长度;I){ char j=s . charat(I);if(j==( j== { j==[){ stack。push(s . charat(I));} else { if(堆栈。isempty()){返回false}//String k=字符串。(堆栈的值。pop()j);得到的是两个字符相加后的整形字符串k=堆栈。pop()字符串。(j)的值;如果(!(k . equals(()) k . equals( { } ) k . equals([]){返回false} } } if(堆栈。isempty()){返回true}返回false}}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。