题目描述
约翰想要计算他那N(l < =N <= 1000)只奶牛的名字的能量.每只奶牛的名字由不超过1000个字 符构成,没有一个名字是空字体串.
约翰有一张"能量字符串表",上面有M(1 < =M < =100)个代表能量的字符串.每个字符串 由不超过30个字体构成,同样不存在空字符串.一个奶牛的名字蕴含多少个能量字符串,这个名 字就有多少能量.所谓"蕴含",是指某个能量字符串的所有字符都在名字串中按顺序出现(不 一定一个紧接着一个).
所有的大写字母和小写字母都是等价的.比如,在贝茜的名字"Bessie"里,蕴含有"Be" "si" "EE"以及"Es"等等字符串,但不蕴含"Ls"或"eB" .请帮约翰计算他的奶牛的名字 的能量.
输入格式
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: Line i+1 contains a string that is the name of the ith cow
* Lines N+2..N+M+1: Line N+i+1 contains the ith good string
输出格式
* Lines 1..N+1: Line i+1 contains the number of quality points of the ith name
样例输入
5 3
Bessie
Jonathan
Montgomery
Alicia
Angola
se
nGo
Ont
样例输出
1
1
2
0
1
参考代码
cpp
#include <bits/stdc++.h>
#include <cstdio>
#define ll long long
using namespace std;
string s[1005];
string gs[105];
int ans[1005] = {0};
string lower(string s)
{
string str = "";
for(int i = 0; i < s.length(); i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
str += s[i] + 32;
else
str += s[i];
}
return str;
}
int main()
{
int n, m, v = 0;
cin>>n>>m;
for(int i = 1; i <= n; i++)
{
cin>>s[i];
s[i] = lower(s[i]);
}
for(int i = 1; i <= m; i++)
{
cin>>gs[i];
gs[i] = lower(gs[i]);
}
for(int i = 1; i <= n; i++)
{
bool flag = false;
for(int t = 1; t <= m; t++)
{
int sh = -1;
for(int j = 0; j < gs[t].length(); j++)
{
int kk = s[i].find(gs[t][j], sh+1);
if(kk <= sh)
{
flag = true;
break;
}
sh = kk;
}
if(!flag)
{
ans[i]++;
}
flag = false;
}
}
for(int i = 1; i <= n; i++)
{
cout<<ans[i]<<endl;
}
return 0;
}