1. 程式人生 > 其它 >【演算法百題之五十二】有效的括號

【演算法百題之五十二】有效的括號

技術標籤:演算法百題leetcode演算法字串有效的括號

【演算法百題之五十二】有效的括號

大家好,我是Lampard~~

很高興又能和大家見面了,接下來準備系列更新的是演算法題,一日一練,早日升仙!

今天的問題是:有效的括號

示例:

輸入: "()"
輸出: true

輸入: "()[]{}"
輸出: true

輸入: "(]"
輸出: false

輸入: "([)]"
輸出: false

輸入: "{[]}"
輸出: true

思路:審題審題一定要審題,因為不審好題我走不少彎路。這道題最好的做法是使用棧來做,若拿到的是左邊的符號:‘(’, '[', '{',則入棧,若拿到的是右邊的符號,就判斷和棧頂是不是適配。

判斷適配的方式我們可以用一個map鍵值對來實現。若不適配則證明不符合,適配則把棧頂元素彈出。遍歷一次字串之後,判斷棧中還有沒有元素即可。

演算法程式碼:

bool isValid(string s) {
	map<char, char> validMap;
	validMap[')'] = '(';
	validMap[']'] = '[';
	validMap['}'] = '{';

	if (s.length() == 0) return true;
	if (s.length() % 2 == 1) return false;

	stack<char> charStack;
	for (char &ch : s) {
		if (validMap.count(ch) == 0) {
			charStack.push(ch);
			continue;
		}

		if (charStack.empty() || charStack.top() != validMap[ch]) return false;
		charStack.pop();
	}
	if (!charStack.empty()) return false;
	return true;
}

邊界:

1.若字串為空則返回true

2.若字串的長度為單數,則返回false(不能構成兩兩配對)

3.在遇到右邊的符號的時候,先判斷棧是否為空,再判斷是否適配

測試結果:

OK,今天的部落格就到這裡,謝謝大家!!!