目录
题目描述
括号序列,给出一个仅包含字符 ' ( ' , ' ) ' , ' { ' , ' } ' , ' [ ' 和 ' ] ' 的字符串,判断给出的字符串是否是合法的括号序列,括号必须以正确的顺序关闭," ( ) " 和 " ( ) [ ] { } " 都是合法的括号序列,但 " ( ] " 和 " ( [ ) ] " 不合法。难度为简单级。以下为使用Java解决的核心代码。
示例
输入1:
(]
输出1:
false
输入2:
{[([])]}
输出2:
true
代码实现
import java.util.*;
public class Solution
{
/**
*
* @param s string字符串
* @return bool布尔型
*/
public boolean isValid (String s)
{
Stack<Character> stack = new Stack<>();
char fi = s.charAt(0);
if(s.length() % 2 != 0) //判断字符串长度是否为奇数,如果是,说明不匹配,直接返回false
return false;
if(fi == ')' || fi == ']' || fi == '}') //判断第一个元素是不是右括号,如果是,直接返回false
return false;
for(int i = 0; i < s.length(); i++)
{
char in = s.charAt(i);
if(in == '(' || in == '[' || in == '{')//如果输入的是左括号,则进行入栈操作
stack.push(in);
else
{
char out = stack.pop();//如果输入的是右括号,则进行出栈操作,即栈顶的左括号
if(in == ')' && out != '(') //如果栈顶的左括号与输入的右括号不匹配,则返回false;
return false;
if(in == ']' && out != '[')
return false;
if(in == '}' && out != '{')
return false;
}
}
return stack.isEmpty();//最后如果全部匹配抵消完的话,栈为空,返回true,如果不是空,说明栈中只有左括号
}
}