Leetcode 第 47 场双周赛 C 5682. 所有子字符串美丽值之和(暴力 字符串常见套路题)

Leetcode 第 47 场双周赛 C  5682. 所有子字符串美丽值之和(暴力 字符串常见套路题)

思路 数据范围比较小 我们可以n方枚举区间 然后求一下字母前缀 然后更新最小值最大值即可

class Solution {
public:
    int beautySum(string s) {
        int a[505][26]={0};
        for(int i=0;s[i];i++){
            if(i==0){
                a[0][s[i]-'a']++;
                continue;
            }
            for(int j=0;j<26;j++){
                if(s[i]-'a'==j)a[i][j]=a[i-1][j]+1;
                else a[i][j]=a[i-1][j];
            }
        }
        int sum=0;
        for(int i=0;s[i];i++){
            for(int j=2;j+i-1<s.size();j++){
                string tep=s.substr(i,j);
                int minn=INT_MAX,maxx=-1;
                for(int k=0;k<26;k++){
                    if(i==0){
                        if(a[i+j-1][k]>0){
                            minn=min(minn,a[i+j-1][k]);
                            maxx=max(maxx,a[i+j-1][k]);
                            
                        }continue;
                    }
                    if(a[i+j-1][k]-a[i-1][k]>0){
                        minn=min(minn,a[i+j-1][k]-a[i-1][k]);
                        maxx=max(maxx,a[i+j-1][k]-a[i-1][k]);
                    }
                }
                sum+=maxx-minn;
               // cout<<tep<<" "<<maxx-minn<<" "<<maxx<<" "<<minn<<endl;
            }
        }
        return sum;
    }
};

 

上一篇:数据结构——c语言 寻找鞍点


下一篇:省选模拟测试13