赞
踩
P a r t Part Part 1 1 1 读题
w g y wgy wgy作为字符串属性的魔法师,有一件史诗级法宝——字符串 S S S(字符串谁没有了 直接 s t r i n g string string S S S这就好了)
下头男 w h y why why作为 w g y wgy wgy的粉丝,努力修炼,深入险境,只为获得和 w g y wgy wgy类似的法宝,经过数十年的积累,下头男 w h y why why获得了 n n n个字符串,现在下头男 w h y why why想知道,这 n n n个字符串有多少个在 S S S中出现。
请你帮他统计一下几个字符串 n n n在 S S S中出现,是指 n n n为 S S S的一个子序列。
输入格式
第一行:一个字符串 S S S
第二行:一个正整数 n n n
接下来 n n n行,每行一个字符串 c [ i ] c[i] c[i]
输出格式
一行一个整数表示答案
输入样例1
abcde
4
a
bb
acd
ace
输出样例1
3
输入样例2
babaaaa
5
abaaab
aaaaaaa
aa
aaaaaaa
ab
输出样例2
2
输入样例3
a
1
a
输出样例3
1
样例说明
对于样例 1 1 1, S S S中出现的字符串为: a a a, a c d acd acd, a c e ace ace,共 3 3 3个
数据范围与提示
对于 20 % 20\% 20%的数据: ∣ S ∣ ≤ 50000 |S|≤50000 ∣S∣≤50000, n ≤ 200 n≤200 n≤200
对于 50 % 50\% 50%的数据: ∣ S ∣ ≤ 50000 |S|≤50000 ∣S∣≤50000, n ≤ 2000 n≤2000 n≤2000
对于 100 % 100\% 100%的数据: ∣ S ∣ ≤ 50000 |S|≤50000 ∣S∣≤50000, n ≤ 5000 n≤5000 n≤5000, ∣ c [ i ] ∣ ≤ 50 |c[i]|≤50 ∣c[i]∣≤50
P a r t Part Part 2 2 2 思路
看到题目,我们就能想到需要进行字符串比较,遍历字符串 s s s,若遇到 c [ 1 ] c[1] c[1]之后再对后面的进行判断,用计数器加上满足条件的个数,比较 n n n与计数器,相等的时候就归零,个数加 1 1 1,以此类推。
我们就得到了如下代码:
for(int i=0;i<n;i++){
cin>>t;
lt=t.size();//lt:t的长度
b=0;//求字符长度的计数器,每次循环开始记着归零
for(int j=0;j<ls;j++){//ls:字符串s的长度
if(s[j]==t[b])b++;//比较,两个字符相等就++
if(b==lt){//归零及个数加1操作,记着要跳出循环
b=0;
a++;
break;
}
}
}
然后我们再加上定义、输入和输出就可以啦!
小tip:大家可以先根据思路,写一下代码哦!
P a r t Part Part 3 3 3 代码
#include<bits/stdc++.h> using namespace std; string s,t; int n,a=0,b=0,ls,lt; int main(){ cin>>s>>n; ls=s.size();//ls:字符串s的长度 for(int i=0;i<n;i++){ cin>>t; lt=t.size();//lt:t的长度 b=0;//求字符长度的计数器,每次循环开始记着归零 for(int j=0;j<ls;j++){ if(s[j]==t[b])b++;//比较,两个字符相等就++ if(b==lt){//归零及个数加1操作,记着要跳出循环 b=0; a++; break; } } } cout<<a; return 0; }
听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。