zoukankan      html  css  js  c++  java
  • 牛客练习赛51 A abc 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。保证输入只包含小写拉丁字符。
    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]!='';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的值。
     
    注意:
    a,ab,abc数据类型要设置成long long 型,如果设置成int型,就会wa!!!
     
     
  • 相关阅读:
    十大排序算法
    SQL优化指南
    Python基础-类与对象
    Python基础-函数
    Python基础-字典
    Python基础-字符串
    Python基础-列表
    以太坊智能合约开发框架Truffle
    比特币钱包搭建与使用
    矩阵的压缩存储
  • 原文地址:https://www.cnblogs.com/lusiqi/p/11478950.html
Copyright © 2011-2022 走看看