字符串分值

简介: 从另一个方向看,可以考虑每个字符对结果的贡献值分别是多少;分别向左右两个方向查找该字符,向左找到该字符的位置记录为left(找不到就为0);向右找到该字符的位置记录为right(找不到就为字符串长度+1);向左找到的位置就是该字符做贡献的开始,向右找到的位置就是该字符做贡献的结束;不难推理出:每个字符的贡献值为(i-left)*(right-i) i为该字符的位置(从1开始计数);那样例来说:第一个a向左查找,left记为0,向右查找,right记为3,那么第一个a的贡献值为(1-0)*(3-1)==2;类推:(2-0)*(4-2)==4;(3-1)*(6-3)=
#include<cstring>
#include<map>
using namespace std;
const int N = 100100;
typedef long long ll;
char s[N];
ll idx;
int main()
{
    cin>>s+1;
    ll len=strlen(s+1);
    ll l=0,r=len+1;
    
    for(int i=1;i<=len;i++)
    {
        char c;
        c=s[i];
        ll right=len+1,left=0;
        
        //向左查找到与该字符相同的位置并记录 
        for(int ll=i-1;ll>=0;ll--)
        {
            if(s[ll]==c)
            {
                left=ll;
                break;
            }
        }
        //向右查找到与该字符相同的位置并记录 
        for(int rr=i+1;rr<=len;rr++)
        {
            if(s[rr]==c)
            {
                right=rr;
                break;
            }
        }
        //记录贡献值 
        idx+=(i-left)*(right-i);
    }
    cout<<idx;
    return 0;
}
相关文章
|
1月前
|
6月前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
5月前
|
存储 人工智能 测试技术
每日练习之字符串——得分
每日练习之字符串——得分
26 0
|
6月前
|
Java
给定一个字符串数组,如何找到其中最长的回文子串?
【4月更文挑战第13天】Java动态规划解题:找出字符串数组中最长的回文子串。代码中,`longestPalindrome`函数遍历数组,利用`expandAroundCenter`方法检测以每个字符为中心的回文串并更新最长长度。当遍历完所有字符串后,返回最长回文子串。
47 6
|
6月前
|
人工智能 算法 测试技术
【字符串】【C++算法】828.统计子串中的唯一字符
【字符串】【C++算法】828.统计子串中的唯一字符
|
6月前
|
Java
java字符串练习题4、统计一行字符串中所有的字符类型数量
java字符串练习题4、统计一行字符串中所有的字符类型数量
65 0
|
6月前
|
算法 测试技术 C#
【map】【滑动窗口】【字典树】C++算法:最长合法子字符串的长度
【map】【滑动窗口】【字典树】C++算法:最长合法子字符串的长度
|
6月前
子串分值和(蓝桥杯C组)
子串分值和(蓝桥杯C组)
42 0
逆序一个字符串的每一组单词(不是倒叙)
整体思路: 1.先将整个字符串倒叙:i like china.->.anihc ekil i 2.将倒叙后的每一块单词再倒叙:.anihc->china. 想必大家都发现了,倒叙整个字符串和倒叙每一块是一样的,那么我们不妨写一个倒叙的函数在这里用reserve表示!
75 0
|
C++
子串分值和
对于一个字符串 S,我们定义 S 的分值 f (S ) 为 S 中出现的不同的字符个数。
59 0