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;
}
相关推荐
0+11128 分钟前
算法 --链表
数据结构·算法·leetcode·链表
圣保罗的大教堂39 分钟前
leetcode 2333. 最小差值平方和 中等
leetcode
铅笔小新z1 小时前
【C语言】深入理解指针
c语言·开发语言
Nil2085 小时前
leetcode 300最长递增子序列
算法·leetcode·职场和发展
yi0117 小时前
LeetCode 424. 替换后的最长重复字符|不定长滑动窗口:如何判断窗口是否合法?
笔记·python·算法·leetcode·双指针·滑动窗口
All for pursuit.7 小时前
【动态规划-11】279.完全平方数
数据结构·c++·算法·leetcode·动态规划
Aurorar0rua8 小时前
CS50 x 2024 Notes Data structures - 08
c语言·开发语言·学习方法
小米里的大麦8 小时前
19 C、C++ 操作 MySQL
c语言·c++·mysql
Logic1018 小时前
C语言/数据结构位运算题解:异或XOR找出套碗游戏中的“幸运碗“——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
番茄灭世神9 小时前
PN学堂GD32教程第12篇——SPI与Nor Flash
c语言·stm32·单片机·嵌入式·gd32·总线协议