zoukankan      html  css  js  c++  java
  • 括号配对问题

    问题:对于给定的只含有 "(", ")", "[", "]", "{", "}" 六种字符的非空字符串,判断其括号是否配对。

    思路:可用 STL 中的栈 stack 来处理。

    首先先判断字符串长度的奇偶性:

    1. 若为奇数,肯定不配对;

    2. 若为偶数,从头到尾遍历给定的字符串:

    (1) 若为 '(', '[', '{', 则入栈;

    (2) 否则,判断栈是否为空:

    ① 若栈为空,肯定不配对;

    ② 否则,判断栈顶是否为其所配对的括号,若是,出栈;否则,肯定不配对;

    最后判断栈是否为空,若为空,则配对;否则,不配对。


    以下是 C++ 实现代码:

     1 /**************************************************************
     2 problem : 括号配对问题
    3 author : 林秋伟 4 time : 2013-10-26 5 **************************************************************/ 6 #include <iostream> 7 #include <string> 8 #include <stack> 9 using namespace std; 10 11 bool judge(string S){ 12 int len=S.size(); 13 if(len&1) return 0; 14 stack<char> s; 15 for(int i=0; i<len; i++){ 16 if(S[i]=='(' || S[i]=='[' || S[i]=='{') s.push(S[i]); 17 else{ 18 if(s.empty()) return 0; 19 if(S[i]==')' && s.top()!='(') return 0; 20 if(S[i]==']' && s.top()!='[') return 0; 21 if(S[i]=='}' && s.top()!='{') return 0; 22 s.pop(); 23 } 24 } 25 return s.empty(); 26 } 27 28 int main(){ 29 string S; 30 while(cin>>S) cout<<(judge(S)? "Yes":"No")<<endl; 31 return 0; 32 }
  • 相关阅读:
    iptables 详解
    Linux Crontab 定时任务命令详解
    Linux下查看历史操作记录
    Linux shell if 参数
    Linux的五个查找命令:find,locate,whereis,which,type
    linux下IPTABLES配置详解
    Linux命令之while Bash中的While循环
    日志分割脚本
    详解 Too many open files
    微软停止对WindowsNT4.0系统提供无偿的支持
  • 原文地址:https://www.cnblogs.com/notonlycodeit/p/3389454.html
Copyright © 2011-2022 走看看