Java代码(没有用栈)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
for(int i=0 ;i<n ;i++){
String s = sc.nextLine();
while(s.contains("()")||s.contains("[]")){
s = s.replace("()", "");
s = s.replace("[]", "");
}
if(s.length()!=0){
System.out.println("No");
}else{
System.out.println("Yes");
}
}
}
}
C++代码(用栈)
#include<iostream>
#include<string>
#include<cstring>
#include<stack>
using namespace std;
int n;
string s;
static stack<char>st;
int main(){
// freopen("input.txt","r",stdin);
cin>>n;
getchar();
while(n--){
getline(cin,s);
int len = s.length();
for(int i=0 ;i<len ;i++){
if((!st.empty()&&s[i]==')'&&st.top()=='(')||(!st.empty()&&s[i]==']'&&st.top()=='['))
st.pop();
else
st.push(s[i]);
}
if(st.empty())
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
while(!st.empty())st.pop();
}
return 0;
}
**在判断栈顶元素和字符串中某个字符是否相同之前要判断栈是否为空,如果栈是空的,那么调用top()的时运行出错。