1353:表达式括号匹配问题(Stack)
题目
思路
这是一道经典的括号匹配问题,根据题目要求,我们可以知道本题只需要考虑左右括号(),检查左右括号是否匹配,所以不用考虑除左右括号外其他的元素,循环遍历字符串,如果遇到左括号,就将其入栈,如果遇到右括号,先判断栈是否为空,如果不为空,就弹出栈顶左括号,如果为空,就说明匹配失败,结束,循环结束后,判断栈若为空,说明匹配成功,否则没匹配成功。
c++源码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
stack<int> stk;//创建栈
for(int i=0;i<s.length();i++)
{
if(s[i]=='(')
{
stk.push(s[i]);//将左括号如栈
}
if(s[i]==')')
{
if(!stk.empty())
{
stk.pop();//遇到右括号,如果栈不为空,弹出栈顶左括号
}
else
{
cout<<"NO";
return 0;
}
}
}
if(stk.empty())//栈最后为空说明匹配成功
{
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
return 0;
}
java源码
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Stack<Character> stack=new Stack<>();
String str=sc.next();
for (int i = 0; i < str.length(); i++) {
char ch=str.charAt(i);
if(ch=='('){
stack.push(ch);
}
else if (ch==')'){
if (!stack.empty()){
stack.pop();
}
else{
break;
}
}
}
if (stack.empty()){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
}
附加题
1354:括弧匹配检验
这道题也是括号匹配的问题,可以拿来巩固一下
新手上路,请多指教!!!