思路
從題干可以看出,只要給出的括號對應關系正確,那么就可以返回true,否則返回false。這個題可以使用棧來解決
解題過程
首先從第一個字符開始遍歷,如果是括號的左邊(‘(‘,’[‘,’}‘),則直接將該字符壓棧
如果是括號的右邊: 首先判斷棧是否為空,如果為空,則直接返回false
如果棧不為空,則可以與棧的頂部數據進行比較,若左右括號對應(’()‘,’[]‘,’{}‘),說明這個括號對應關系正確,然后直接使用stack.pop()出棧 遍歷完s中的所有數據之后,若棧為空,說明所有括號的對應關系都正確,直接返回true,否則返回false
以示例2作為例子:
代碼
class Solution {
public:bool isValid(string s) {stack <char> stack;for(int i=0;i<s.length();i++){char c = s[i];if(c == '(' || c == '[' || c == '{')stack.push(c);else if(c == ')'){if(stack.empty() || stack.top()!='('){return false;}else {stack.pop();} }else if(c == ']'){if(stack.empty() || stack.top()!='['){return false;}else {stack.pop();}}else if(c == '}'){if(stack.empty() || stack.top()!='{'){return false;}else {stack.pop();}}}return stack.empty();}
};