題目:https://leetcode-cn.com/problems/valid-parentheses/
給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。
有效字符串需滿足:
左括號(hào)必須用相同類型的右括號(hào)閉合。
左括號(hào)必須以正確的順序閉合。
我的方法一:棧
如果是左括號(hào)那么壓棧,如果是右括號(hào),然后比較和棧頂?shù)淖罄ㄌ?hào)是否是一對(duì),如果不是,那么無(wú)效
邊界條件
這個(gè)題比較簡(jiǎn)單,主要需要考慮幾個(gè)邊界情況
- 可能出現(xiàn)右括號(hào)時(shí),棧為空,說(shuō)明沒(méi)有對(duì)應(yīng)的左括號(hào),不合法
- 當(dāng)遍歷完了所有的括號(hào)后,可能棧不為空,說(shuō)明左括號(hào)的數(shù)量多于右括號(hào),也不合法
代碼
class Solution {
public:
bool isValid(string s) {
stack<char> stk;
int n = s.size();
const char* str = s.c_str();
for(int i = 0; i < n; i++) {
if(str[i] == '(' || str[i] == '[' || str[i] == '{'){
stk.push(str[i]);
}else{
if(s.empty()){
return false;
}
if (str[i] == ')'){
if(stk.top() != '('){
return false;
}else{
stk.pop();
}
}else if (str[i] == '}'){
if(stk.top() != '{'){
return false;
}else{
stk.pop();
}
}else if (str[i] == ']'){
if(stk.top() != '['){
return false;
}else{
stk.pop();
}
}
}
}
return stk.empty();
}
};
其他方法
優(yōu)化點(diǎn),判斷是否是偶數(shù)
如果是奇數(shù),肯定不合法,所以一個(gè)很好的優(yōu)化