简单的题目描述:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。来源:力扣(LeetCode)
这里用的是java的堆栈解题,当为左括号则入栈,右括号则出栈,进行一次遍历,当遍历结束时判断堆栈是否为空来确定结果。中间可以有一些优化:奇数直接返回false,初始为右括号也返回false等等。
idea测试代码
import java.util.Stack;
public class JsonConver {
public static void main(String[] args) {
boolean a;
String s = new String();
s = "()";
a = isValid(s);
System.out.println(a);
}
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
//将字符串对象中的字符转换为一个字符数组。
char[] str = s.toCharArray();
//判断是否为奇数个字符
if(s.length()%2!=0){
return false;
}
//遍历str字符数组
for (char a: str
) {
//左括号则直接入栈
if(a=='(' || a=='{' || a=='['){
stack.push(a);
}
//为右括号时,先进行判断然后进行出栈
else{
if (!stack.isEmpty()) {
if(a==')'){
if(stack.pop()!='('){
return false;
}
}
if (a=='}'){
if(stack.pop()!='{'){
return false;
}
}
if (a==']'){
if(stack.pop()!='['){
return false;
}
}
}
else{
return false;
}
}
}
if(stack.isEmpty()){
return true;
}
else{
return false;
}
}
}