給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認爲是有效字符串。
示例 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