左右括號匹配

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

        有效字符串需滿足:
        左括號必須用相同類型的右括號閉合。
        左括號必須以正確的順序閉合。
        注意空字符串可被認爲是有效字符串。

示例 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

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