广东外语外贸大学第16届程序设计竞赛A 葱葱串
A 葱葱串
Description
聪哥在开发完lpoj后,甚是无聊,于是他决定再开发一个项目练手,但是这次他藏得很好,没有被任何人发现。聪明的你能找到聪哥的新项目吗?
Input
一个字符串,该字符串由大写和小写字母组成,字符串长度 <= 10^6
Output
最后一次出现的,仅由8个连续出现的大写字符组成的字符串
Sample Input 1
abcdERFGTYHTasdfQWERTYUIgggHHHHHHHHHq
Sample Output 1
QWERTYUI
思路
要求最后一次出现的仅八位连续大写字符组成的字符串。
“最后一次”——从输入字符串末尾开始扫
“八位”——设置一个计数器
当出现大写字符,计数器+1;
当出现小写字符,计数器清零。
“仅八位连续”——当达到计数器达到8时还不能停止,要判断多一个,即下一位是否是大写字符。
若下一位是大写字符,计数器清零,不满足仅仅连续的八个字符都是大写。
若下一位是小写字符,满足所有条件,可以直接跳出循环。
“输出满足条件的字符串”——因为是连续的,判断时记录字符串第一位或者最后一位的下标,连续输出8位即可。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
int num=0,k=-1;
cin>>a;
for(int i=a.length();i>=0;i--)
{
if(a[i]>='A' && a[i]<='Z')
{
if(num==0) k=i;
num++;
if(num>8) num=0;
}
else num=0;
if(num==8 && (a[i-1]<'A' || a[i-1]>'Z') ) break;
}
if(num==8)
{
for(int i=k-7;i<=k-1;i++)
cout<<a[i];
cout<<a[k]<<endl;
}
return 0;
}