1. 程式人生 > >leetcode的括號配對,自己寫的程式碼有些問題。求指教

leetcode的括號配對,自己寫的程式碼有些問題。求指教

題目是這樣的:
給定一個只包含以下字元的字串’(‘, ‘)’, ‘{‘, ‘}’, ‘[‘和’]’,確定輸入字串是否有效。

在以下情況下,輸入字串是有效的:

開放括號必須用相同型別的括號關閉。
開括號必須按照正確的順序關閉。
注意,空字串也被認為是有效的。

例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");

}
}