给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()" 输出: true
示例 2:
输入: "()[]{}" 输出: true
解题思路:
这里我们需要用一个栈,我们开始遍历输入字符串,如果当前字符为左半边括号时,则将其压入栈中,如果遇到右半边括号时,若此时栈为空,则直接返回false,如不为空,则取出栈顶元素,若为对应的左半边括号,则继续循环,反之返回false。
public static boolean isValid(String s) {
Stack<Character> p=new Stack<>();
//注意字符串是对象,空字符串也是对象,==只能判断两个引用是否相同
if(s.equals(""))
{
return true;
}
if((s.charAt(0)==')')||(s.charAt(0)==']')||(s.charAt(0)=='}'))
return false;
p.push(s.charAt(0));
int i=1;
while(i<s.length())
{
if(s.charAt(i)==')')
{
if(p.isEmpty())
return false;
else if(p.peek()=='(')
p.pop();
else
return false;
}
else if(s.charAt(i)==']')
{
if(p.isEmpty())
return false;
else if(p.peek()=='[')
p.pop();
else
return false;
}
else if(s.charAt(i)=='}')
{
if(p.isEmpty())
return false;
else if(p.peek()=='{')
p.pop();
else
return false;
}
else
p.push(s.charAt(i));
i++;
}
if(p.isEmpty())
return true;
return false;
}