leetcode 20 字符匹配

题目; https://leetcode-cn.com/problems/valid-parentheses/submissions/
思路一:
利用栈,因为队列应用于解决对称性问题
先计算字符串的长度,如果为奇数,就返回fasle,如果为偶数,则遍历字符串
从头开始遍历字符串,如果遍历到的字符是’(’,’{’,’[’,则入栈,如果遍历到的字符是‘)’,‘}’‘】’,则先判断栈是否为空,空就返回false,不为空就和栈顶元素相比较看是否匹配,同时将栈顶元素删掉,不匹配就返回false,匹配就继续循环
循环结束后,看栈是否为空,为空就返回true,不为空就返回false
class Solution {
stack stk;
public:
bool isValid(string s) {
/*
//利用栈

          int len = s.size();
          if (len % 2 == 1)
                 return false;
          const char*ss = s.c_str();
          char ch = ' ';
          for (int i = 0; i < len; i++)
          {
                 switch (s[i])
                 {
                 case '(':
                 case '{':
                 case '[':
                       stk.push(ss[i]);
                       break;
                 case ')':
                       if (stk.empty()) {
                              return false;
                       }
                        ch = stk.top();
                       stk.pop();
                       if (ch != '(')
                              return false;
                       break;
                 case '}':
                       if (stk.empty()) {
                              return false;
                       }
                        ch = stk.top();
                       stk.pop();
                       if (ch !='{')
                              return false;
                       break;
                 case ']':
                       if (stk.empty()) {
                              return false;
                       }
                        ch = stk.top();
                       stk.pop();
                       if (ch !='[')
                              return false;
                       break;
                 default:
                       return false;
                       break;
                 }
          }
          if (stk.empty())
                 return true;
          else
                 return false;

};

思路二;同样利用栈
我们先来分析一下 这里有三种不匹配的情况,

第一种情况,字符串里左方向的括号多余了 ,所以不匹配。
( [ { } ] ( )

第二种情况,括号没有多余,但是 括号的类型没有匹配上。

( 【 { } } }

第三种情况,字符串里右方向的括号多余了,所以不匹配。
( [ { } ] ) ) )

作者:carlsun-2
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/20-you-xiao-de-gua-hao-xiang-qing-chu-san-chong-qi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
计算字符串长度,遍历字符串,
如果遍历到的字符是‘(’,‘{’,‘【’则将‘)’‘}’,‘】’入栈
如果遍历到的是‘)’,‘}’,‘】’,则先判断栈是否为空,空就返回false,不为空就看字符和栈顶元素是否相等,相等就将栈顶元素删掉,继续下一次的循环,不相等就返回false

class Solution {
stack stk;
public:
bool isValid(string s) {
int count = s.size();
for (int i = 0; i < count; i++)
{
if (s[i] == ‘(’)
stk.push(’)’);
else if (s[i] == ‘{’)
stk.push(’}’);
else if (s[i] == ‘[’)
stk.push(’]’);
else if (s[i] == ‘)’ || s[i] == ‘}’ || s[i] == ‘]’)
{
if (stk.empty())
return false;
else if (s[i] == stk.top())
stk.pop();
else return false;
}
}
if (stk.empty())
return true;
else
return false;
}
};
思路三:利用哈希表,将符号映射为相应的键值,利用键值去检查匹配
class Solution {
stack stk;
public:
bool isValid(string s) {
unordered_map<char, int>m={ {’(’,1},{’{’,2},{’[’,3},{’)’,4},{’}’,5},{’]’,6} };
for (char ch : s) {
int flag = m[ch];
if (flag >= 1 && flag <= 3)
stk.push(ch);
else if (flag >3) {
if (stk.empty()) {
return false;
}
else {
if ((flag-3) != m[stk.top()])
{
return false;
}
else stk.pop();
}
}

          }
          if (stk.empty())
                 return true;
          else
                 return false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值