2 条题解

  • 0
    @ 2026-7-20 1:43:01

    P1739 表达式括号匹配——题解

    思路

    只需要关心左右圆括号,其他字符全部跳过。

    cnt 表示当前还没有被匹配的左括号数量:

    • 遇到 (,令 cnt++
    • 遇到 ):若 cnt==0,说明右括号出现在可匹配的左括号之前,立即判定不合法;否则令 cnt--
    • 遇到 @ 时停止。

    最后只有 cnt==0 才说明没有多余的左括号。

    复杂度

    时间复杂度 O(s)O(|s|),额外空间复杂度 O(1)O(1)

    参考代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        string s;
        cin >> s;
        int cnt = 0;
        for (char c : s) {
            if (c == '@') break;
            if (c == '(') cnt++;
            else if (c == ')') {
                if (cnt == 0) {
                    cout << "NO\n";
                    return 0;
                }
                cnt--;
            }
        }
        cout << (cnt == 0 ? "YES\n" : "NO\n");
        return 0;
    }
    
    • 0
      @ 2026-7-20 1:43:01

      #include <bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; int cnt=0; for(char c:s){ if(c=='@') break; if(c=='(') cnt++; else if(c==')'){ if(cnt0){ cout<<"NO\n"; return 0; } cnt--; } } cout<<(cnt0?"YES\n":"NO\n"); return 0; }

      • 1

      信息

      ID
      4963
      时间
      1000ms
      内存
      128MiB
      难度
      10
      标签
      递交数
      1
      已通过
      1
      上传者