虽然是一道简单题,但是我还是有想法的,就想写写题解,相信你们都会做,那就来看看有没有你没考虑到的方法吧:
方法一:直接模拟
这个代码是我自己写的,写完以后才发现有这么多问题(主要是逻辑上的错误,已订正):
class Solution {
public:
bool isValid(string s) {
int len=s.size();
if(len%2!=0)
return false;
stack
for(int i=0;i { if(p.empty()&&(s[i]==')'||s[i]==']'||s[i]=='}')) return false; else if(s[i]==')'&&p.top()=='(') p.pop(); else if(s[i]==']'&&p.top()=='[') p.pop(); else if(s[i]=='}'&&p.top()=='{') p.pop(); else p.push(s[i]); } return p.empty(); } }; 方法二:利用map来对应(官方题解,值得学习) class Solution { public: bool isValid(string s) { int n = s.size(); if (n % 2 == 1) { return false; } unordered_map { {')', '('}, {']', '['}, {'}', '{'} }; stack for (char ch: s) { if (pairs.count(ch))//如果找到了这个字符,那么就来判断栈顶的元素是否与之对应 { if (stk.empty() || stk.top() != pairs[ch]) { return false; } stk.pop(); } else { stk.push(ch); } } return stk.empty(); } }; 方法三:ascll码的值(大佬神解,妙手回春) class Solution { public: bool isValid(string s) { if(s == ""){ return true; } vector stack.push_back(s[0]); for(int i=1; i if(stack.empty() == true){ stack.push_back(s[i]); }else if(s[i] - stack.back() == 1 || s[i] - stack.back() == 2){//注意这个地方不能加绝对值,要不然就错了 stack.pop_back(); } else { stack.push_back(s[i]); } } return stack.empty(); } }; 记录当下,我的编程之路



