子串分值和

简介: 对于一个字符串 S,我们定义 S 的分值 f (S ) 为 S 中出现的不同的字符个数。

蓝桥杯 C/C++组 第八题:子串分值和


题目描述


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

现在给定一个字符串 S [0::n − 1](长度为 n),请你计算对于所有 S 的非空子串 S [i:: j](0 ≤ i ≤ j < n), f (S [i:: j]) 的和是多少。


【输入格式】


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


【输出格式】


输出一个整数表示答案。


【样例输入】


ababc


【样例输出】


28


【样例说明】


子串 f值

a 1

ab 2

aba 2

abab 2

ababc 3

b 1

ba 2

bab 2

babc 3

a 1

ab 2

abc 3

b 1

bc 2

c 1


题目分析


看了网上各位大佬的分析,一般都采用了**ans+=(i-pre[s[i]-‘a’])(len-i+1);***奈何天资愚钝,感觉不太好理解。故采用了一种较为简单的理解方式。


int calculate(int i,int j)
{
    int word[26]={};
    int tempnumber=0;
    for(int k=i;k<=j;k++)
    {
        word[s[k]-'a']=word[s[k]-'a']+1;
    }
    for (int a = 0; a < sizeof(word)/sizeof(int); ++a) {
        if(word[a]>0)
        {
            tempnumber++;
        }
    }
    return tempnumber;
}


题目代码(完整代码)


#include <iostream>
#include <string>
using namespace std;
string s;
int calculate(int i,int j)
{
    int word[26]={};
    int tempnumber=0;
    for(int k=i;k<=j;k++)
    {
        word[s[k]-'a']=word[s[k]-'a']+1;
    }
    for (int a = 0; a < sizeof(word)/sizeof(int); ++a) {
        if(word[a]>0)
        {
            tempnumber++;
        }
    }
    return tempnumber;
}
int main()
{
    cin>>s;
    int num=0;
    for(int i=0;i<s.size();i++)
    {
        for(int j=i;j<s.size();j++)
        {
            num=num+calculate(i,j);
        }
    }
    printf("%d",num);
    return 0;
}


如果各位大佬觉得有帮助,清点赞👍支持一下呗!!!

目录
相关文章
|
6月前
|
存储
【题型总结】寻找满足字符出现奇数次/偶数次的子串个数或者子串最长长度
【题型总结】寻找满足字符出现奇数次/偶数次的子串个数或者子串最长长度
114 0
|
6月前
|
算法
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
63 0
|
1月前
|
4月前
|
存储
2559. 统计范围内的元音字符串数(前缀和) o(n)时间复杂度
2559. 统计范围内的元音字符串数(前缀和) o(n)时间复杂度
|
6月前
|
Java
给定一个字符串数组,如何找到其中最长的回文子串?
【4月更文挑战第13天】Java动态规划解题:找出字符串数组中最长的回文子串。代码中,`longestPalindrome`函数遍历数组,利用`expandAroundCenter`方法检测以每个字符为中心的回文串并更新最长长度。当遍历完所有字符串后,返回最长回文子串。
47 6
|
6月前
|
算法 测试技术 C#
【线段树】2213. 由单个字符重复的最长子字符串
【线段树】2213. 由单个字符重复的最长子字符串
|
6月前
|
算法 测试技术 C++
【贪心 堆 】3081. 替换字符串中的问号使分数最小
【贪心 堆 】3081. 替换字符串中的问号使分数最小
|
6月前
|
人工智能 算法 测试技术
【字符串】【C++算法】828.统计子串中的唯一字符
【字符串】【C++算法】828.统计子串中的唯一字符
|
6月前
子串分值和(蓝桥杯C组)
子串分值和(蓝桥杯C组)
42 0
|
6月前
|
存储 算法 程序员
【算法训练-字符串 一】【子串问题】最长无重复子串、最长回文子串、最长公共前缀
【算法训练-字符串 一】【子串问题】最长无重复子串、最长回文子串、最长公共前缀
67 0