本文主要是介绍[传智杯 #3 决赛] 子串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目背景
disangan233 喜欢字符串,于是 disangan333 想让你找一些 disangan233 喜欢的串。
题目描述
在传智的开发课堂上,希望您开发一款文档处理软件。
给定 T 组询问,每次给定 22 个长度为 n,m 的只含英文字母的字符串 a,b,求 a 在 b 中的出现次数,相同字符不区分大小写。注意 a 是 b 中连续子序列。
对于所有数据,T≤100,∑n≤∑m≤10的3次方。字符串仅由大小或者小写的英文字母组成。
输入格式
输入共 3T+1 行。
第 1 行输入 1 个正整数 T。
接下来共 T 组输入,每组输入共 3 行。
第 1 行输入 2 个正整数 n,m。
第 2行输入一个长度为 n 的字符串 a。
第 3行输入一个长度为 m 的字符串 b。
输出格式
输出共 T 行,第 i 行输出 1 个整数,表示询问 i 的答案。
输入输出样例
输入 #1复制
5 3 10 abc abcabcabca 2 10 aa AAaAaaAaAa 5 5 AbCdE eDcBa 5 5 abcde ABCDE 3 10 aba ABaBaAbaBA
输出 #1复制
3 9 0 1 4
说明/提示
对于第一组输入,出现了 3 次,分别是 [abc]abcabca
,abc[abc]abca
,abcabc[abc]a
;
对于第二组输入,出现了 9 次,分别是 [Aa]AaaAaAa
,A[aA]aaAaAa
,Aa[Aa]aAaAa
,AaA[aa]AaAa
,AaAa[aA]aAa
,AaAaa[Aa]Aa
,AaAaaA[aA]a
,AaAaaA[aA]a
,AaAaaAa[Aa]
。
#include <iostream>
using namespace std;
string b_sm(string s){//把两个字符串的大写统一成小写,方便比较int l=s.size();for(int i=0;i<l;i++){if(s[i]>='A'&&s[i]<='Z')s[i]+=32;}return s;
}
int main(){int n;string ch1,ch2;cin>>n;for(int i=1;i<=n;i++){int a,b,sum=0;cin>>a>>b>>ch1>>ch2;ch1=b_sm(ch1);ch2=b_sm(ch2);for(int i=0;i<ch2.size();i++){if(ch2.substr(i,ch1.size())==ch1)sum++;/*substr函数格式 (俗称:字符截取函数)substr(string, start<,length>):从string的start位置开始提取字符串 格式1: substr(string string, int a, int b);格式2:substr(string string, int a) ;*/}cout<<sum<<endl;}return 0;
}
这篇关于[传智杯 #3 决赛] 子串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!