You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不排序的前提下实现字符串去重功能?

无需排序的字符串去重实现方案

你当前的排序实现会打乱字符原本的出现顺序,输出的是字典序的去重结果,和你给出的"allcbcd" -> "alcbd"测试用例预期不符。无需排序的去重方案完全可以实现需求,还能保留字符首次出现的顺序,时间复杂度为O(n),比排序方案的O(nlogn)效率更高。

核心逻辑是用一个标记容器记录已经出现过的字符,遍历原字符串时仅将首次出现的字符加入结果集即可。

C++实现代码

#include <iostream>
#include <string>

using namespace std;

string removeDup(string s) {
    // 标记ASCII字符是否已出现,初始值全为false
    bool seen[128] = {false};
    string res;
    for (char c : s) {
        unsigned char uc = static_cast<unsigned char>(c);
        if (!seen[uc]) {
            res += c;
            seen[uc] = true;
        }
    }
    return res;
}

int main() {
    cout << removeDup("allcbcd") << endl; // 输出alcbd,符合测试用例要求
    return 0;
}

扩展说明

  • 如果需要处理Unicode等非ASCII字符,将布尔数组替换为unordered_set<char>(或对应宽字符类型的容器)即可,核心逻辑不变。
  • 如果你偏好递归实现,只需将标记容器作为递归参数传递即可,不需要引入排序步骤。

内容的提问来源于stack exchange,提问作者Jay1105

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:09:03