Little-Prince

导航

20. 有效的括号

20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:

 1.左括号必须用相同类型的右括号闭合。
 2.左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。
 
 
示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false

示例 5:
输入: "{[]}"
输出: true
 
 
思路:
利用栈后进先出的特性。遇到左括号将其压入栈中,遇到右括号从栈中取出最上面的元素进行比较,若不匹配,返回false。全部字符遍历完,栈应该为空。为使代码简洁应该利用字典,建立左右括号的映射。时间复杂度o(n),空间复杂度o(n)。
 
代码:
class Solution {
public:
    bool isValid(string s) {

        if(s.length()%2)//因配对需要,length 应为偶数(包括0)
            return 0;
        unordered_map<char, char> mp;
        mp[')'] = '(';
        mp[']'] = '[';
        mp['}'] = '{';
        stack<char> st;
        char c;
        int i;
        for(i = 0; i < s.length(); i++)
        {
            unordered_map<char, char>::iterator it = mp.find(s[i]);
            if(it==mp.end())
                st.push(s[i]);
            else
            {
                if(st.empty())
                    return 0;
                c = st.top();
                  st.pop();
                if(it->second != c)
                    return 0;
            }
        }
        return st.empty();
        
    }
};

 

posted on 2020-07-30 10:10  Little-Prince  阅读(164)  评论(0)    收藏  举报