牛客練習賽51 A abc
阿新 • • 發佈:2019-09-07
題意:
給出一個字串s,你需要做的是統計s中子串”abc”的個數。子串的定義就是存在任意下標a<b<c,那麼”s[a]s[b]s[c]”就構成s的一個子串。如”abc”的子串有”a”、”b”、”c”、”ab”、”ac”、”bc”、”abc”。
輸入描述:
一個字串s。保證輸入只包含小寫拉丁字元。
1<=|s|<=1e5
輸出描述:
一個整數表示s中子串”abc”的個數。
示例1
輸入
abcabc
輸出
4
ac程式碼:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s;
ll a=0,ab=0,abc=0;
int main(){
cin>>s;
for(int i=0;s[i]!='\0';i++){
if(s[i]=='a')
a++;
else if(s[i]=='b')
ab+=a;
else if(s[i]=='c')
abc+=ab;
}
cout<<abc<<endl;
return 0;
} 思路: 1.需要統計的是abc的個數,字串長度1e5,暴力直接超時,所以只能掃一遍。 2.然後我們可以想abc的順序是先a再b最後c,我們可以先想子問題ab, 只要有a就加一,記錄a出現的次數c1,當出現b時就會有c1個ab,那麼看abc,ab作為一個整體,記錄ab出現的次數AB,當出現c是就有AB個abc。 3.當遍歷出現a是就記錄下來a++,當遍歷b時ab就有a個,當遍歷到c時,abc就有ab個,最後輸出abc的值。 &nbs
using namespace std;
typedef long long ll;
string s;
ll a=0,ab=0,abc=0;
int main(){
cin>>s;
for(int i=0;s[i]!='\0';i++){
if(s[i]=='a')
a++;
else if(s[i]=='b')
ab+=a;
else if(s[i]=='c')
abc+=ab;
}
cout<<abc<<endl;
return 0;
} 思路: 1.需要統計的是abc的個數,字串長度1e5,暴力直接超時,所以只能掃一遍。 2.然後我們可以想abc的順序是先a再b最後c,我們可以先想子問題ab, 只要有a就加一,記錄a出現的次數c1,當出現b時就會有c1個ab,那麼看abc,ab作為一個整體,記錄ab出現的次數AB,當出現c是就有AB個abc。 3.當遍歷出現a是就記錄下來a++,當遍歷b時ab就有a個,當遍歷到c時,abc就有ab個,最後輸出abc的值。 &nbs