题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
1,空字符串可被认为是有效字符串。
2,左右括号必须以正确的顺序闭合。
如:
合法:{[]}()
非法:{[}]
**
实现代码:
**
法1:
// 多次循环替换括号,如果替换后的字符串还是替换前的字符串,则为无效字符串
public static boolean isValid(String s) {
String str="";
while(!s.equals("")){
str=s.replace("{}","").replace("[]","").replace("()","");
if(s==str){
return false;
}
s=str;
}
return true;
}
法2:
// 遇到一个正向括号,将对应的反向括号填入栈中
// 遇到反向括号,将栈中的正向括号拿出比较
public static boolean isValid1(String s) {
Stack<Character> stack = new Stack<Character>();
for(char c: s.toCharArray()){
if(c=='(')stack.push(')');
else if(c=='[')stack.push(']');
else if(c=='{')stack.push('}');
else if(stack.isEmpty()||c!=stack.pop())return false;
}
return stack.isEmpty();
}