Leetcode—828.统计子串中的唯一字符【困难】

2023每日刷题(四十一)

Leetcode—828.统计子串中的唯一字符

Leetcode—828.统计子串中的唯一字符【困难】_第1张图片

算法思想

枚举所有种类字母在s中出现的位置,分别统计只包含这个字母不包含该类字母中其他字母的子串个数
Leetcode—828.统计子串中的唯一字符【困难】_第2张图片

实现代码

int uniqueLetterString(char* s) {
    int len = strlen(s);
    char c;
    int ans = 0;
    int i = 0;
    for(c = 'A'; c <= 'Z'; c++) {
        int last0 = -1, last1 = -1;
        for(i = 0; i < len; i++) {
            if(s[i] == c) {
                last1 = last0;
                last0 = i;
            }
            ans += last0 - last1;
        }
    }
    return ans;
}

运行结果

Leetcode—828.统计子串中的唯一字符【困难】_第3张图片

优化版算法思想

参考灵神题解
Leetcode—828.统计子串中的唯一字符【困难】_第4张图片

实现代码

int uniqueLetterString(char* s) {
    int last0[26], last1[26];
    int ans = 0;
    int total = 0;
    int n = strlen(s);
    memset(last0, -1, sizeof(last0));
    memset(last1, -1, sizeof(last1));
    for(int i = 0; i < n; i++) {
        int c = s[i] - 'A';
        total += i - 2 * last0[c] + last1[c];
        ans += total;
        last1[c] = last0[c];
        last0[c] = i;
    }
    return ans;
}

运行结果

Leetcode—828.统计子串中的唯一字符【困难】_第5张图片

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

你可能感兴趣的:(LeetCode刷题,leetcode,算法,职场和发展,经验分享,c语言)