【问题描述】给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:
1)左括号必须用相同类型的右括号闭合。
2)左括号必须以正确的顺序闭合。
提示: 1 <= 串长 <= 104且 s 仅由括号 '()[]{}' 组成
【输入形式】由括号构成的字符串
【输出形式】括号匹配则输出yes、不匹配输出no
【样例输入】()
【样例输出】yes
【样例输入】()[]{}
【样例输出】yes
【样例输入】{[]}
【样例输出】yes
【样例输入】([)]
【样例输出】no
#include<iostream>
#include<string>
using namespace std;
int main()
{
string st;
cin>>st;
int i,j,k;
k=st.length();
if(st[0]==']'||st[0]=='}'||st[0]==')'||k%2==1)
cout<<"no"; //如果长度为奇数或开头为}])不满足要求
else
{
for(i=k-1; i>0; i--)
{
if(st[i]==']'&&st[i-1]=='['||st[i]==')'&&st[i-1]=='('||st[i]=='}'&&st[i-1]=='{')
{
st.erase(i-1,2);
}
k=st.length();
}
if(k==0)
cout<<"yes";
else
cout<<"no";
}
}
该程序实现了对输入括号字符串的有效性检查,遵循括号匹配规则:左右括号必须对应且顺序正确。通过读取输入的括号字符串,检查其长度和首字符,然后从后往前遍历字符串,消除匹配的括号对,最终判断是否所有括号都已正确匹配。若字符串长度为0,则表示所有括号匹配成功,输出yes;否则输出no。
1262

被折叠的 条评论
为什么被折叠?



