zoukankan      html  css  js  c++  java
  • 栈————有效的括号

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

    有效字符串需满足:

    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 };
  • 相关阅读:
    [置顶] Django 微信开发(一)——环境搭建
    opencv学习_5 (IplImage的结构)
    HDU 3910 (13.10.31)
    Python源码学习七 .py文件的解释
    Android高效加载大图、多图解决方案,有效避免程序内存溢出现象
    记录cocos2d-html5与cocosd-x jsb中遇到的坑
    【PAT Advanced Level】1011. World Cup Betting (20)
    Linux文件实时同步,可实现一对多
    mahout源码分析之DistributedLanczosSolver(五)Job over
    php引入lucene方法
  • 原文地址:https://www.cnblogs.com/pacino12134/p/10967733.html
Copyright © 2011-2022 走看看