介绍
在说题目之前,我们介绍一下栈:
栈类似数组,其实可以用数组解决,但是栈也有独特的地方:
栈的缺点:
无法像:a[9],a[i]这样查看!所以前面说栈只是类似数组!
优点:
可以直接操作,如:q.push、q.pop等等
我们接下来用栈做到题目吧!
题目描述:
小明最近的作业是写一篇文章。然而,他发现写作真的很无聊,两个小时过后,他发现他所写的是N个由字母‘A’和‘B’组成的单词。他接受现实了:无法按时完成作业。于是小明开始找点乐子。
小明通过在单词上方绘制拱桥来连接成对相同的两个字母(即A与A,B与B)。如果一个单词中,每个字母都可以通过拱桥连接到另一个字母,且任意两个拱桥都不相交,则认为该单词是完美的。
任务要求:请帮助小明计算最多有多少个单词是完美的。
输入格式:
第1行输入一个正整数N,表示Mirko写下的单词数量;
第2到第N+1行,第i+1行包含一个单词Si,仅由字母A和B组成;
输出格式:
输出共一行一个整数,即最多有多少个完美单词的数量。
样例输入:
样例1 3 ABAB AABB ABBA 样例2 3 AAA AA AB 样例3 1 ABBABB
样例输出:
样例1 2 样例2 1 样例3 1
提示:
【数据规模】
对于20%的数据: 1≤N≤20;
对于100%的数据:1≤N≤100;|Si|≤100,000;
时间限制: 1000ms
空间限制: 256MB
解析:
直接上代码!
#include<bits/stdc++.h>
using namespace std;
string s;
stack<char>st;
int main()
{
int n,sum=0;
cin>>n;
while(n--){
cin>>s;
for(int i=0;i<s.length();i++){
if(!st.empty()&&st.top()==s[i]){
st.pop();
}
else{
st.push(s[i]);
}
}
if(st.empty()){
sum++;
}
while(!st.empty())st.pop();
}
cout<<sum;
return 0;
}
OK,今天就到这里啦!