给定一个只包括 '(',')','{','}','[',']'
的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
首先来看我的傻傻的暴力解法,判断这个字符串是否是双数,不是就直接返回false,接下来就是一个循环、三个判断。最后如果stack为null,就返回标志num,否则就返回false。
思路简单,代码暴力,纯纯的牛马操作,别笑。
public static boolean isValid(String s) {
boolean num=false;
Deque<Character> stack=new LinkedList<>();
if(s.length()%2==0){
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i)=='['){
stack.push('[');
}else if(s.charAt(i)==']'){
if(!stack.isEmpty()&&stack.pop()=='['){
num=true;
}else{
num=false;
break;
}
}
if(s.charAt(i)=='{'){
stack.push('{');
}else if(s.charAt(i)=='}'){
if(!stack.isEmpty()&&stack.pop()=='{'){
num=true;
}else{
num=false;
break;
}
}
if(s.charAt(i)=='('){
stack.push('(');
}else if(s.charAt(i)==')'){
if(!stack.isEmpty()&&stack.pop()=='('){
num=true;
}else{
num=false;
break;
}
}
}
if(stack.isEmpty()){
return num;
}
}
return false;
}
再看看大佬们的代码,直接让我自闭。用replace方法将所有的"()","{}","[]"
换成""
,我去,我是garbage。。
class Solution {
public boolean isValid(String s) {
int length = s.length() / 2;
for (int i = 0; i < length; i++) {
s = s.replace("()", "").replace("{}", "").replace("[]", "");
}
return s.length() == 0;
}
}