链接:https://ac.nowcoder.com/acm/contest/1083/A 来源:牛客网

题目描述 :

给出一个字符串s,你需要做的是统计s中子串”abc”的个数。子串的定义就是存在任意下标a<b<c,那么”s[a]s[b]s[c]”就构成s的一个子串。如”abc”的子串有”a”、”b”、”c”、”ab”、”ac”、”bc”、”abc”。 输入描述:

一个字符串s。保证输入只包含小写拉丁字符。 输出描述:

一个整数表示s中子串”abc”的个数。 示例1

输入

abcabc

输出

4

备注:

1<=|s|<=1e5 分析: 查找子串abc的个数,而且是可以不连续的,abc又都能重复使用,要单独从abc的个数角度来看无疑是非常复杂的,出现字母c之后,abc的个数就等于ab出现的次数加一,出现几次字母c就加几次,同理ab的个数是a的个数加上来的 完整代码:

#include<iostream>
using namespace std;
int main(){
	long long a=0;
	long long ab=0;
	long long abc=0;
	string s;
	cin>>s;
	int n = s.size();
	for(int k=0;k<n;k++){
		if(s[k]=='a')a++;
		else if(s[k]=='b')ab+=a;
		else if(s[k]=='c')abc+=ab;
	}
	cout<<abc<<endl;
}