C语言 | Leetcode C语言题解之第316题去除重复字母

题目:

题解:

cpp 复制代码
char* removeDuplicateLetters(char* s) {
    int vis[26], num[26];
    memset(vis, 0, sizeof(vis));
    memset(num, 0, sizeof(num));

    int n = strlen(s);
    for (int i = 0; i < n; i++) {
        num[s[i] - 'a']++;
    }

    char* stk = malloc(sizeof(char) * 27);
    int stkTop = 0;
    for (int i = 0; i < n; i++) {
        if (!vis[s[i] - 'a']) {
            while (stkTop > 0 && stk[stkTop - 1] > s[i]) {
                if (num[stk[stkTop - 1] - 'a'] > 0) {
                    vis[stk[--stkTop] - 'a'] = 0;
                } else {
                    break;
                }
            }
            vis[s[i] - 'a'] = 1;
            stk[stkTop++] = s[i];
        }
        num[s[i] - 'a'] -= 1;
    }
    stk[stkTop] = '\0';
    return stk;
}
相关推荐
漂流瓶jz3 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
文丑颜不良啊4 小时前
LeetCode1481~1500题目解析
java·leetcode
文丑颜不良啊4 小时前
LeetCode1381~1400题目解析
java·leetcode
·present·5 小时前
CSAPP(Bomb lab)
c语言·c++
Tisfy8 小时前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
A boy CDEF girl9 小时前
算法题专栏:优选算法
数据结构·算法·leetcode
wuminyu10 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
图灵-M13 小时前
【数据结构】静态 & 动态顺序表
c语言·数据结构·笔记
揽星河..13 小时前
【C语言】数组
c语言·开发语言·算法
水饺编程13 小时前
第2章:Linux 基础,制作【.tar.xz】压缩包文件
linux·c语言·汇编