有效的括號
給定一個只包括 '('瑰谜,')','{'树绩,'}'萨脑,'[',']' 的字符串饺饭,判斷字符串是否有效渤早。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合砰奕。
注意空字符串可被認(rèn)為是有效字符串蛛芥。
示例 1:
輸入: "()"
輸出: true
示例 2:
輸入: "()[]{}"
輸出: true
示例 3:
輸入: "(]"
輸出: false
示例 4:
輸入: "([)]"
輸出: false
示例 5:
輸入: "{[]}"
輸出: true
思路:利用棧的入門題,將符號串如果是前括號一個個推入棧中军援,如果是后括號取棧頂檢驗(yàn)仅淑。
時間復(fù)雜度:O(n)每個符號只循環(huán)一次
空間復(fù)雜度:O(n)需要保存維護(hù)一個保存最多n個符號的棧
class Solution {
public:
bool isValid(string s) {
stack<char> f;
for(int i=0;i<s.size();i++){
if(s[i] == '('||s[i] == '{'|| s[i] == '['){
f.push(s[i]);
}else if(s[i] == ')'){
if(f.empty()||f.top() != '(')return false;
f.pop();
}else if(s[i] == ']'){
if(f.empty()||f.top() != '[')return false;
f.pop();
}else if(s[i] == '}'){
if(f.empty()||f.top() != '{')return false;
f.pop();
}else{
return false;
}
}
if(!f.empty())return false;
return true;
}
};