《难了~》

题目描述

有 t 组测试数据,对于每组测试数据,给出n个字符串,保证字符串中只包含英文字母,对于每个字符串,先把其中的小写字母改写为大写字母,然后翻转字符串,然后取出每个字符串中下标为3-5的子串(s[3]s[4]s[5]),输出这些子串的数量,相同的子串只计算一次,对这些字串按字典序排序后输出(不论这个子串出现过几次,只要出现一次就输出一次),每个子串占一行,然后对于每个子串,若其中含有字母’L’,则输出Yes,否则输出No.

输入描述

第一行一个整数T(1<=T<=1000),表示测试数据的组数.
对于每组测试数据,第一行输入一个整数n(1<=n<=100),表示字符串的数量.
接下来n行,每行一个长度不低于6的字符串.

输出描述

对于每组测试数据:
第一行输出n个子串中不同子串的个数.
对于n个子串,输出连续的两行,第一行为这个子串本身,第二行为"Yes"或"No".

样例

输入
2
3
SJmskxji
wlemdnkHB
ddsjiaijH
4
SJSNDBjns
soksnwbs
hzmsjxl
SHXMksjs
输出
3
JIA
No
MDN
No
SKX
No
4
MKS
No
NDB
No
SJX
No
SNW
No

本体主要考察对STL容器以及相关用法的熟练程度。
代码如下:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+10;

string str[110];//存放大字符串
map<string,int> mp;//存放字串,运用map对key值的去重和默认升序排列
int t,n;

int main()
{
	cin>>t;
	while(t--)
	{
		mp.clear();//重置map,防止上次循环的数据造成影响
		cin>>n;
		for(int i=1; i<=n; i++)
		{
			cin>>str[i];
			for(int j=0; j<str[i].size(); j++)
			{
				if(str[i][j]>='a'&&str[i][j]<='z')
					str[i][j]-=32;//将小写转化为大写
			}
			//reverse(str[i].begin(),str[i].end());//倒置s1
		}
		for(int i=1; i<=n; i++)
		{
			mp[str[i].substr(3,3)]=i;//存储子串
		}
		cout<<mp.size()<<endl;
		for(auto it=mp.begin(); it!=mp.end(); it++)
		{
			cout<<it->first<<endl;
			int flag=0;//字串中是否有'L'
			for(int i=0; i<3; i++)
			{
				if(it->first[i]=='L')
				{
					cout<<"Yes\n";
					flag=1;
					break;
				}
			}
			if(!flag)
				cout<<"No\n";
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值