给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 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