题目是这样的:
给定一个只包含以下字符的字符串’(‘, ‘)’, ‘{‘, ‘}’, ‘[‘和’]’,确定输入字符串是否有效。
在以下情况下,输入字符串是有效的:
开放括号必须用相同类型的括号关闭。
开括号必须按照正确的顺序关闭。
注意,空字符串也被认为是有效的。
例1:
Input: “()”
Output: true
例2:
Input: “()[]{}”
Output: true
例3:
Input: “(]”
Output: false
例4:
Input: “([)]”
Output: false
例5:
Input: “{[]}”
Output: true
下面是我写的代码:
①这是输出为:false,然而我找了挺久的都没发现错在哪里;可能是当局者迷吧
package leetCode;
import java.util.Stack;
public class IsValid {
public static void main(String[] args) {
String s="(){}[]";
char[] c=s.toCharArray();
int flag=0;
Stack<Character> stack=new Stack<Character>();
while(stack.empty())
stack.push(c[0]);
System.out.println(stack.elementAt(0));
for(int i=1;i<c.length;i++)
{
char temp=c[i];
Character p=stack.pop();
if(c[0]==')'&&c[0]=='}'&&c[0]==']')
{
flag=1;
break;
}
else if(temp=='('||temp=='{'||temp=='[')
{
stack.push(temp);
}
else if(temp==')')
{
if(p=='('&&!stack.empty())
{
stack.pop();
}
else
{
flag=1;
break;
}
}
else if(temp==']')
{
if(p=='['&&!stack.empty())
{
stack.pop();
}
else
{
flag=1;
break;
}
}
else if(temp=='}')
{
if(p=='{'&&!stack.empty())
{
stack.pop();
}
else
{
flag=1;
break;
}
}
}
if(!stack.empty()||flag==1)
//return false;
System.out.println("false");
else
//return true;
System.out.println("true");
}
}
②这个问题是它显示我的栈是空的(
package leetCode;
import java.util.Stack;
public class IsValid {
public static void main(String[] args) {
String s="(){}[]";
Stack<Character> stack=new Stack<Character>();
char[] arr=s.toCharArray();
int flag=0;
for(char c:arr)
{
Character temp=stack.pop();
if(temp==null)
{
stack.push(c);
}
if(stack.isEmpty()) {
System.out.print(false);
}
else if(temp=='('&&c==')')
{
stack.pop();
}
else if(temp=='['&&c==']')
{
stack.pop();
}
else if(temp=='{'&&c=='}')
{
stack.pop();
}
else
{
flag=1;
break;
}
}
if(!stack.empty()||flag==1)
//return false;
System.out.println("false");
else
//return true;
System.out.println("true");
}
}