题目:
读入一个字符串s, s每个字符都是'('或')'或'['或']'或'{'或'}',如果s是括号匹配的输出yes,否则输出no。
输入格式:
一个字符串s,长度不超过100。
输出格式:
yes或no,表示是否可以括号匹配。
输入/输出例子1
输入:
([]){()}
输出:
yes
输入/输出例子2
输入:
(]
输出:
no
输入/输出例子3
输入:
([)]
输出:
no
在博客里很多人会用栈来做括号匹配,这次用的是substr函数和size函数来做。
好了,话不多说,现在奉上代码:
#include<bits/stdc++.h>
using namespace std;
int findSubstr(string s, string a,string b,string c){
for(int i=0; i<s.size(); i++)
if( s.substr(i,2)==a||s.substr(i,2)==b||s.substr(i,2)==c)
return i;
return -1;
}
int main(){
string s;
cin>>s;
int index=findSubstr(s,"()","[]","{}");
while(index!=-1){
s=s.substr(0,index)+s.substr(index+2,s.size()-index-2);
index=findSubstr(s,"()","[]","{}");
}
if(s=="") cout<<"yes";
else cout<<"no";
return 0;
}
其实和栈原理差不多,只不过用了点函数。