题目大致意思:给你一个字符串,让你计算这个字符串里面有多少个子串含有bear。
想法:每当找到一个bear,就用这个bear(后面字符的个数+1)*(前面字符的个数+1),当然这样会重复计算,因此要减去上一个bear中的个数。
写法一:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int cd=s.size(),ans=0,zhi=0;
for(int i=0;i<cd;i++){
if(s[i]=='b'&&s[i+1]=='e'&&s[i+2]=='a'&&s[i+3]=='r'){
ans=ans+(i+1)*(cd-i-4+1);
ans-=zhi*(cd-i-4+1);//去掉重复的部分
zhi=i+1;
}
}
cout<<ans<<endl;
return 0;
}
写法二:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int i=0,ans=0,k=s.size(),sum=0;
while(s.find("bear",i)!=s.npos){
i=s.find("bear",i);
ans+=(i+1)*(k-i-3)-sum*(k-i-3);
sum=i+1;
i++;
}
cout<<ans<<endl;
}