中等题(真题)-小乐乐与字符串(子序列个数问题)
题目:
思路:
- 这道题思路如果使用暴力法的话,时间复杂度为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);
}
}