描述
leafee 最近爱上了 abb 型语句,比如“叠词词”、“恶心心”
leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列?
定义: abb 型字符串满足以下条件:
- 字符串长度为 3 。
- 字符串后两位相同。
- 字符串前两位不同。
输入描述:
第一行一个正整数 n
第二行一个长度为 n 的字符串(只包含小写字母)
1≤n≤10^5
输出描述:
"abb" 型的子序列个数。
示例1
输入:
6 abcbcc输出:
8说明:
共有1个abb,3个acc,4个bcc
示例2
输入:
4 abbb输出:
3
a[i][j]:表示 i 后出现了 n 次字母'j';
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
long ans=0;
String str=scan.next();
int[][] a=new int[n+1][26];
for(int i=n-1;i>=0;i--){
char s=str.charAt(i);
for(int j=0;j<26;j++){
a[i][j]=a[i+1][j];
}
a[i][s-'a']++;
}
for(int i=0;i<n;i++){
char ss=str.charAt(i);
for(int j=0;j<26;j++){
if(j!=ss-'a'&&a[i][j]>=2){
ans+=(a[i][j]*(a[i][j]-1))/2;
}
}
}
System.out.println(ans);
}
}
这篇文章介绍了一段Java代码,用于解决给定小写字母字符串中abb类型子序列的数量问题。代码通过动态规划计算满足条件的子序列个数,提供了两个示例来说明算法的应用。
3680

被折叠的 条评论
为什么被折叠?



