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;
}
相关推荐
alphaTao12 分钟前
LeetCode 每日一题 2025/5/12-2025/5/18
算法·leetcode
半青年1 小时前
Qt读取Excel文件的技术实现与最佳实践
c语言·c++·python·qt·c#·excel
exe4522 小时前
力扣每日一题5-18
java·算法·leetcode
阳洞洞2 小时前
leetcode 74. Search a 2D Matrix
leetcode·二分查找
YuforiaCode2 小时前
LeetCode 219.存在重复元素 II
算法·leetcode·职场和发展
小雅痞2 小时前
[Java][Leetcode middle] 151. 反转字符串中的单词
java·leetcode
CodeQingqing3 小时前
C语言练手磨时间
c语言·数据结构·算法
勇闯逆流河11 小时前
【数据结构】堆
c语言·数据结构·算法
飞川撸码12 小时前
【LeetCode 热题100】739:每日温度(详细解析)(Go语言版)
算法·leetcode·golang
jz_ddk15 小时前
[学习] RTKLib详解:rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c
c语言·学习·算法