左右括号匹配

        给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。

        有效字符串需满足:
        左括号必须用相同类型的右括号闭合。
        左括号必须以正确的顺序闭合。
        注意空字符串可被认为是有效字符串。

示例 1:
        输入: “()”
        输出: true

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

示例 3:
        输入: “(]”
        输出: false

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

示例 5:
        输入: “{[]}”
        输出: true

        1、解决方法:把字符串放入栈中,所有的左括号都进站,标记符cnt加1,然后把与当前右括号匹配的左括号都出栈,标记符cnt就减一;出栈完成后,判断cnt是否为零,若cnt=0,则括号是匹配的,否则不匹配。
        核心代码如下:
        //DoValid.cpp

bool DoValid(string& str) {
	string tmp;
	int cnt = 0;
	for (int i = 0; i < str.size(); i++) {
		if (str[i] == '{' || str[i] == '[' || str[i] == '(') {
			tmp.push_back(str[i]);
			cnt++;
		}
		else if (cnt != 0 && (tmp[cnt - 1] + 1 == str[i] || tmp[cnt - 1] + 2 == str[i])) {
			tmp.pop_back();
			cnt--;
		}
		else
			return false;
	}

	if (cnt != 0)
		return false;
	else
		return true;
}


class Solution {
public:
	bool isValid(string s) {
		return DoValid(s);
	}
};

        2、备注
        来源:力扣(LeetCode) 题号:20
        链接:LeetCode 有效括号 No20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章