1. 程式人生 > >LeetCode 20.有效的括號 Valid Parentheses

LeetCode 20.有效的括號 Valid Parentheses

題目連結

給定一個只包括‘(’,‘)’,‘[’,‘]’,‘{’,‘}’的字串,判斷字串是否有效。

思路1:

利用棧,是前一半括號的,入棧,是後一半括號的,判斷棧頂元素是不是和它相匹配,是則出棧;不是返回false。

遍歷完整個字串後,判斷棧是否為空,空則返回true;非空則返回false。


思路2:

和思路1一樣的思路,不利用棧了,只是換成在原字串上操作。

用一個變數,模擬棧頂指標。

程式碼如下:

class Solution {
public:
    bool isValid(string s) {
        int i=-1,j=0;//i為模擬棧頂指標,初始化為-1,表示空棧
        int len=s.length();
        int arr[128];
        arr['(']=1;
        arr['[']=2;
        arr['{']=3;
        
        arr[')']=-1;
        arr[']']=-2;
        arr['}']=-3;
        while(j<len)
        {
            if(arr[s[j]]>0)   s[++i]=s[j];//i為模擬棧頂指標
            else
            {
                if(i>=0&&arr[s[j]]+arr[s[i]]==0)
                {
                    i--;
                }
                else return false;
            }
            j++;
        }
        if(i==-1)   return true;//空棧
        else return false;
    }
};