leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列?
定义: abb 型字符串满足以下条件:
- 字符串长度为 3 。
- 字符串后两位相同。
- 字符串前两位不同。
leafee 拿到了一个只含有小写字母的字符串,她想知道有多少个 "abb" 型的子序列?
定义: abb 型字符串满足以下条件:
第一行一个正整数第二行一个长度为的字符串(只包含小写字母)
"abb" 型的子序列个数。
6 abcbcc
8
共有1个abb,3个acc,4个bcc
4 abbb
3
#include <stdio.h> int main() { int n; scanf("%d",&n); char c[n]; getchar(); scanf("%s",c); int sum[n+1][26]; for (int i=0; i<n+1; i++) { for (int j=0; j<26; j++) { sum[i][j]=0; } } // for (int i=0; i<n; i++) { // for (int j=i; j<n; j++) { // sum[i][c[j]-'a']++; // } // } for(int i=n-1;i>=0;i--){ for(int j=0;j<26;j++)sum[i][j]=sum[i+1][j]; sum[i][c[i]-'a']++; } long long r=0; for (int i=0; i<n; i++) { for (int j=0; j<26; j++) { if (j!=(c[i]-'a')) { r+=(sum[i][j]*(sum[i][j]-1)/2); } } } printf("%lld", r); return 0; }
#include <stdio.h> int main() { int n; scanf("%d",&n); char c[n]; getchar(); scanf("%s",c); int sum[n+1][26]; for (int i=0; i<n+1; i++) { for (int j=0; j<26; j++) { sum[i][j]=0; } } // for (int i=0; i<n; i++) { // for (int j=i; j<n; j++) { // sum[i][c[j]-'a']++; // } // } for(int i=n-1;i>=0;i--){ for(int j=0;j<26;j++)sum[i][j]=sum[i+1][j]; sum[i][c[i]-'a']++; } long long r=0; for (int i=0; i<n; i++) { for (int j=0; j<26; j++) { if (j!=(c[i]-'a')) { r+=(sum[i][j]*(sum[i][j]-1)/2); } } } printf("%lld", r); return 0; }