第十一届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 子串分值和 60%解法

题目描述

对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中出现的不同的字符个数。例如 f(“aba”)=2,f(“abc”)=3,f(“aaa”)=1f(“aba”)=2,f(“abc”)=3,f(“aaa”)=1。

现在给定一个字符串 S[0...n−1]S[0...n−1](长度为 nn),请你计算对于所有 SS 的非空子串 S[i...j](0≤i≤j

输入描述

输入一行包含一个由小写字母组成的字符串 SS。

其中,1≤n≤1051≤n≤105。

#include 
using namespace std;
const int N=1e5+10;
long long ans;
int cnt [26];
char s[N];
int main()
{
  cin>>s+1;
  int n=strlen(s+1);
  for(int j=1;j<=n;j++){
  for(int i=0;i<=25;i++)cnt[i]=0;
  int df=0;
  
  for (int i=j;i<=n;i++)
  {
    if(cnt[s[i]-'a']==0)df++;
    cnt[s[i]-'a']++;
    ans+=df;
  }
  }
  cout<

你可能感兴趣的:(蓝桥解析,蓝桥杯,c语言,c++)