首页 > 代码库 > leetcode.20-----------Valid Parentheses

leetcode.20-----------Valid Parentheses

Given a string containing just the characters ‘(‘‘)‘‘{‘‘}‘‘[‘ and ‘]‘, determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

方法一:这个方法有点难以理解,不过仔细分析后就一目了然


class Solution {
public:
	bool isValid(string const& s) {
		string left = "([{";
		string ringht = ")]}";
		stack<char> tmp;
		for (auto c : s)
		{
			if (left.find(c) != string::npos)
			{
				tmp.push(c);
			}
			else
			{
				if (tmp.empty() || tmp.top() != left[ringht.find(c)])//栈为空或着没有找到匹配的
					return false;
				else//找到匹配了 就弹出栈顶的元素
					tmp.pop();
			}
		}
		return tmp.empty();//如果遍历完了,栈里面还有元素说明没有完全匹配
	}
};


方法二:比较直接的匹配,直观一下就能看明白

class Solution {
public:
    bool isValid(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        stack<char> stacks;
        for (int i = 0; i < s.size(); i++) {
            switch (s[i]) {
                case '(':
                case '[':
                case '{':
                    stacks.push(s[i]);
                    break;
                case ')':
                    if (stacks.empty() || stacks.top() != '(') {
                        return false;
                    }
                    stacks.pop();
                    break;
                case ']':
                    if (stacks.empty() || stacks.top() != '[') {
                        return false;
                    }
                    stacks.pop();
                    break;
                case '}':
                    if (stacks.empty() || stacks.top() != '{') {
                        return false;
                    }
                    stacks.pop();
                    break;
                default:
                    return false;
            }
        }
        return stacks.empty();
    }
};



leetcode.20-----------Valid Parentheses