题目:
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
题意:
给定一个字符串,包含以下字符'('
, ')'
, '{'
, '}'
, '['
and ']',
判断输入的字符串是否有效。
这些括号必须按正确的顺序关闭,
"()"
and "()[]{}"就是有效的,
"(]"
and "([)]"
就是无效的。
算法分析:
该题是匹配括号是否匹配合法问题,可以采用栈来实现,而栈一般采用数组来进行标示。如果遇到字符(
,{
和[
,则将其压入栈中,如果遇到)
,}
和]
,则需要对栈顶元素进行判定,看是否与括号相匹配,如果匹配则弹出栈顶元素,否则则认为匹配不合法,直接结束匹配过程。
算法流程如下:
定义数组栈stack;
foreach c in String:
if c 为(,{,[ then stack.push(c);
if c 为 ), }, ] then 判定stack是否为空和stack.top是否与c相匹配。
AC代码:
public class Solution
{
private boolean a;
private boolean flag;
private int i;
private int n;
public boolean isValid(String s)
{
Stack st= new Stack(); // 创建堆栈对象
if (s.length()%2!=0) flag=false;
else
{
i=0;
st.push(s.charAt(0));
while (i<s.length()-1)
{
if(st.empty())
{
st.push(s.charAt(i+1));
i++;
}
if((st.peek().toString().charAt(0)=='('&&s.charAt(i+1)==')')||(st.peek().toString().charAt(0)=='['&&s.charAt(i+1)==']' )||(st.peek().toString().charAt(0)=='{'&&s.charAt(i+1)=='}'))
{
st.pop();
}
else
st.push(s.charAt(i+1));
i++;
}
flag=st.empty();
}
return flag;
}
}