1. 程式人生 > >牛客練習賽51 A abc

牛客練習賽51 A abc

  題意: 給出一個字串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