1 条题解

  • 0
    @ 2026-1-28 10:44:58
    #include<bits/stdc++.h>
    using namespace std;
    
    int main() {
        // [1] s-存储输入的括号字符串(仅包含()[]四种字符,长度≤100)
    	string s;
    	cin>>s;
    	
        // [2] v-栈,用于存储未匹配的左括号('('或'[')
    	stack<char> v;
        // [3] 遍历括号字符串的每个字符
    	for(int i=0;i<s.size();i++){
            // [4] 情况1:当前字符是左括号'(',压入栈中
    		if(s[i]=='('){
    			v.push(s[i]);
            // [5] 情况2:当前字符是左括号'[',压入栈中
    		}else if(s[i]=='['){
    			v.push(s[i]);
            // [6] 情况3:当前字符是右括号(')'或']')
    		}else{
                // [7] 检查栈是否为空(若为空,说明右括号无匹配的左括号,直接输出no并终止程序)
                if(v.empty()){
                    cout<<"no";
                    return 0;
                }
                // [8] 若当前是']'且栈顶是'[',说明匹配,弹出栈顶
    			if(s[i]==']' && v.top()=='['){
    				v.pop();
                // [9] 若当前是')'且栈顶是'(',说明匹配,弹出栈顶
    			}else if(s[i]==')' && v.top()=='('){
    				v.pop();
                // [10] 否则括号不匹配(如')'对应'[',或']'对应'('),输出no并终止程序
    			}else{
    				cout<<"no";
    				return 0;
    			}
    		}
    	}
        // [11] 遍历结束后,检查栈是否为空(栈空表示所有左括号都匹配了右括号,否则仍有未匹配的左括号)
        if(v.empty()){
            cout<<"yes";
        }else{
            cout<<"no";
        }
        return 0;
    }
    
    • 1

    信息

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