• 括号匹配2019


    题面:

    发现了一个由'('和')'组成的环,他想知道如果将环从某处断开,得到的序列有没有可能让括号能够匹配。比如环"))(("可以拆成"))((" "())(" "(())" ")(()"四种,其中"(())"的括号就能够匹配,另外三种则不能。
    请你帮他设计一个程序,可以知道,由括号组成的环能不能得到一个可以匹配的序列。

    思路:

    1、先在最后复制一次,再以’(‘为起始点,验证以l为长度的序列是否匹配

    2、因为串是可以循环的,那么只要其左括号和右括号的数量相等,这个串就是匹配的(就一定会有一种方法可以匹配)

    直接暴力判断左括号和右括号数量是否匹配即可

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int l,f,k;
     4 stack<char>c;
     5 string s;
     6 int main()
     7 {
     8     while (cin>>s)
     9     {
    10         k=0;
    11         l=s.length();
    12         s=s+s;
    13         for (int i=0; i<l; i++)
    14         {
    15             f=0;
    16             while (c.size()) c.pop();
    17             if (s[i]=='(')
    18             {
    19                 for (int j=i; j<l+i; j++)
    20                 {
    21                     if (s[j]=='(')
    22                     {
    23                         c.push(s[j]);
    24                     }
    25                     else
    26                     {
    27                         if (c.size()==0)
    28                         {
    29                             f=1;
    30                             break;
    31                         }
    32                         c.pop();
    33                     }
    34                 }
    35             }
    36             else continue;
    37             if (f==0&&c.size()==0)
    38             {
    39                 k=1;
    40                 printf("YES
    ");
    41                 break;
    42             }
    43         }
    44         if (k==0) printf("NO
    ");
    45     }
    46 }
    View Code
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 char c[100010];
     4 int l,k,k1;
     5 int main(){
     6     scanf("%s",c);
     7     l=strlen(c);
     8     for (int i=0;i<l;i++){
     9         if (c[i]=='(') k++;else k1++;
    10     }
    11     if (k1==k){
    12         printf("YES
    ");
    13     }else{
    14         printf("NO
    ");
    15     }
    16 }
    View Code
  • 相关阅读:
    js实现继承的5种方式
    JavaScript文件操作(1)-基础
    12 个免费在线的 Web 网站性能测试工具
    server r2 系统更新文件清理
    在C#中,Json的序列化和反序列化的几种方式总结
    ES6,新增数据结构Set的用法
    ES6中有关数组的一些新操作
    vue中mode hash 和 history的区别
    POST和GET的区别
    前端的细节
  • 原文地址:https://www.cnblogs.com/Accpted/p/11185397.html
Copyright © 2020-2023  润新知