中等题(真题)-小乐乐与字符串(子序列个数问题)
题目:

思路:
- 这道题思路如果使用暴力法的话,时间复杂度为O(n^3),也比较简单,就不叙述了。
 
- 我们可以抓住目标字符串的特点,
- 从前往后计算C的个数(每遇到一次,就是多一个C次数所以countC++)
 
- 从前往后计算H的个数(每遇到一次,就是多countC个CH次数,所以countCN +=countC)
 
- 从前往后计算N的个数(每遇到一次,就是多countCH个CHN次数,所以countCHN +=countCH)
 
- 最后返回countCHN。
 
 
代码:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        /*统计子串*/
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        String ss = "CHN";
        long countC = 0;
        long  countCH = 0;
        long countCHN = 0;
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i)=='C') countC++;
            if(s.charAt(i)=='H') countCH+=countC; //遇到H就可以组成countC个CH
            if(s.charAt(i)=='N') countCHN += countCH; //遇到N就可以组成countCH个CHN
        }
        System.out.println(countCHN);
    }
}