LeetCode第20题:有效括号
- 题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合
- 解法一:运用自己的解法,循环了好几遍了,还是不太对。。。。。最后一次改完,超出时间限制了,哎。。。自我感觉没什么问题了。。。
class Solution {
public boolean isValid(String s) {
if(s.length()==0 || s=="") return true;
int len=s.length(),j=-1;
String a="";
for(int i=0;i<len;){
char ss=s.charAt(i);
switch(ss){
case '(':
a=a+"a";
j++;
i++;
break;
case '{':
a=a+'b';
j++;
i++;
break;
case '[':
a=a+'c';
j++;
i++;
break;
case ')':
if(a.charAt(j)=='a'){
break;
}else{
return false;
}
case '}':
if(a.charAt(j)=='b'){
break;
}else{
return false;
}
case ']':
if(a.charAt(j)=='c'){
break;
}else{
return false;
}
default:
i++;
break;
}
}
return true;
}
}
- 解法二:采用的栈的思想,小白看得也不是很懂。等我再学一学栈再来理解这里吧
class Solution {
private static final Map<Character,Character> map = new HashMap<Character,Character>(){{
put('{','}'); put('[',']'); put('(',')'); put('?','?');
}};
public boolean isValid(String s) {
if(s.length() > 0 && !map.containsKey(s.charAt(0))) return false;
LinkedList<Character> stack = new LinkedList<Character>() {{ add('?'); }};
for(Character c : s.toCharArray()){
if(map.containsKey(c)) stack.addLast(c);
else if(map.get(stack.removeLast()) != c) return false;
}
return stack.size() == 1;
}
}
作者:jyd
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/valid-parentheses-fu-zhu-zhan-fa-by-jin407891080/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。