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

题目:

image

思路:

  • 这道题思路如果使用暴力法的话,时间复杂度为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);
    }
}


posted on 2024-04-26 22:51  一个痴迷于技术的码农  阅读(3)  评论(0编辑  收藏  举报