1 条题解

  • 0
    @ 2025-7-8 18:30:13

    方法思路

    1. 栈的应用:使用栈来检查括号的有效性。遇到左括号时压栈,遇到右括号时检查栈顶是否匹配。
    2. 计数有效括号对:在每次成功匹配一对括号时,增加计数器。
    3. 最终检查:遍历完字符串后,栈应为空,否则说明有未匹配的括号。

    代码实现

    Java
    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int t = Integer.parseInt(br.readLine());
            
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < t; i++) {
                String s = br.readLine();
                sb.append(isValidBrackets(s)).append("\n");
            }
            System.out.print(sb);
        }
        
        static String isValidBrackets(String s) {
            char[] stack = new char[s.length()];
            int top = -1;
            int count = 0;
            
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                switch (c) {
                    case '(': case '{': case '[':
                        stack[++top] = c;
                        break;
                    case ')':
                        if (top < 0 || stack[top--] != '(') return "False";
                        count++;
                        break;
                    case '}':
                        if (top < 0 || stack[top--] != '{') return "False";
                        count++;
                        break;
                    case ']':
                        if (top < 0 || stack[top--] != '[') return "False";
                        count++;
                        break;
                }
            }
            
            return (top == -1) ? String.valueOf(count) : "False";
        }
    }
    
    
    Python
    def is_valid_brackets(s):
        stack = []
        pairs = {')': '(', '}': '{', ']': '['}
        count = 0
        
        for char in s:
            if char in '({[':
                stack.append(char)
            elif char in ')}]':
                if not stack or stack.pop() != pairs[char]:
                    return False
                count += 1
        
        return count if not stack else False
    
    t = int(input())
    for _ in range(t):
        s = input().strip()
        result = is_valid_brackets(s)
        print(result)
    
    
    C++
    #include <iostream>
    #include <stack>
    #include <unordered_map>
    #include <string>
    using namespace std;
    
    string isValidBrackets(string s) {
        stack<char> st;
        unordered_map<char, char> pairs = {{')', '('}, {'}', '{'}, {']', '['}};
        int count = 0;
        
        for (char c : s) {
            if (c == '(' || c == '{' || c == '[') {
                st.push(c);
            } else if (c == ')' || c == '}' || c == ']') {
                if (st.empty() || st.top() != pairs[c]) {
                    return "False";
                }
                st.pop();
                count++;
            }
        }
        
        if (st.empty()) {
            return to_string(count);
        } else {
            return "False";
        }
    }
    
    int main() {
        int t;
        cin >> t;
        cin.ignore();
        
        for (int i = 0; i < t; i++) {
            string s;
            getline(cin, s);
            cout << isValidBrackets(s) << endl;
        }
        
        return 0;
    }
    
    
    • 1

    信息

    ID
    33
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    1
    已通过
    1
    上传者