• 栈————有效的括号


    给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

    输入: "()[]{}"
    输出: true
    

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

    输入: "([)]"
    输出: false
    

    示例 5:

    输入: "{[]}"
    输出: true

    核心思想: 利用栈的性质,先进后出,遇到左括号则压入栈,遇到右括号则与栈顶元素匹配,若匹配成功则将栈顶元素弹出,反之返回false。

    匹配方法: 利用map建立哈希表,实现括号一一对应关系。

    代码:

     1 #include <iostream>
     2 #include <stack>
     3 #include <string>
     4 #include <map>
     5 using namespace std;
     6 class Solution {
     7 public:
     8     bool isValid(string s) {
     9         if(s.length()%2!=0) return false;//一但是奇数说明不是有效的括号
    10         map<char,char> wordbook;//建立哈希表
    11         wordbook.insert(map<char,char>::value_type('(',')'));
    12         wordbook.insert(map<char,char>::value_type('[',']'));
    13         wordbook.insert(map<char,char>::value_type('{','}'));
    14         stack<char> mystack;//建立栈
    15         for(int i=0;i<s.length();i++)
    16         {
    17             if(s[i]=='['||s[i]=='{'||s[i]=='(')//匹配到左括号
    18                 mystack.push(s[i]);//放入栈中
    19             else if(s[i]==']'||s[i]=='}'||s[i]==')')//匹配到右括号
    20             {
    21                 if(mystack.empty()) return false;
    22                 //匹配到右括号,栈中应该存在左括号。否则就是无效的括号
    23                 if(wordbook[mystack.top()]==s[i])//与栈顶元素进行匹配
    24                 {
    25                     mystack.pop();//匹配成功删除栈顶元素
    26                     continue;
    27                 }
    28                 else return false;
    29             }
    30         }
    31         if(mystack.empty()) return true;//有效的括号到最后检测结束栈中应没有元素
    32         else return false;
    33     }
    34 };
  • 相关阅读:
    HDU 3374 String Problem(最小(大)表示 + KMP)
    HDU 1253 胜利大逃亡
    #include <cctype>
    HDU 4162 Shape Number(最小表示法)
    USACO section1.3 Mixing Milk 混合牛奶
    HDU 1572 下沙小面的(2)
    HDU 1969 Pie
    USACO section1.2 Milking Cows 挤牛奶(区间覆盖)
    HDU 2492 Ping pong (树状数组)
    筛选法打表:求某个数的素因子之和
  • 原文地址:https://www.cnblogs.com/pacino12134/p/10967733.html
Copyright © 2020-2023  润新知