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

展示多条短语所需最少字符数求解及代码优化咨询

字符采购最小集问题

我们有一组不同的多字母短语,需要在墙上逐次展示其中一条。

每个字母都需要单独采购,因此我们希望求出能够展示所有短语所需的最少字符总数,以及具体需要采购的字符清单。

示例:要展示短语"Computer"和"Visual studio community",我们需要:

  • c, o, m, p, u, t, e, r, v, i, s, a, l, s, u, d, i, o, m, u, n, i, t, y
  • 共24个字符

输出结果c, o, m, p, u, t, e, r, v, i, s, a, l, s, u, d, i, o, m, u, n, i, t, y就是组成computer和visual studio community所需的最小字符集。程序逻辑如下:第一个短语的字符直接全部保留,展示第二个短语时优先复用已有字符,仅补充缺失部分。展示Visual studio community时只需补充v, i, s, a, l, s, u, d, i, o, m, u, n, i, t, y这些字符,因为可以复用computer中的u来拼visual,同理复用其中的t来拼studio。

如果输入新增单词Computer,输出不会变化,因为现有字符集合已经可以拼出该单词,无需额外采购字符;如果将输入的studio多加一个t改为visual sttudio community,输出就需要新增一个t,因为computer仅提供1个t,现在总共需要2个t,所以需要额外补充。

以上是完整题干,我已经写了如下实现程序,想请教是否有更简单的实现方式,运行速度不需要考虑。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector<string> phrases = {/*0*/ "Hello world", /*1*/ "Lorem ipsum dolar sit amet", /*2*/ "This is a programming challenge"};

    vector<char> letters;

    for (int i = 0; i < phrases.size(); i++)
    {
        string copyOfPhrases = phrases[i];
        vector<char> copyOfLetters = letters;

        copyOfPhrases.erase(remove(copyOfPhrases.begin(), copyOfPhrases.end(), ' '), copyOfPhrases.end());
        transform(copyOfPhrases.begin(), copyOfPhrases.end(), copyOfPhrases.begin(), ::tolower);

        for (int j = 0; j < copyOfPhrases.size(); j++)
        {
            int ok = 0;
            for (int k = 0; k < copyOfLetters.size(); k++)
            {
                if (copyOfPhrases[j] == copyOfLetters[k])
                {
                    ok += 1;
                }
            }
            if (ok == 0)
            {
                letters.push_back(copyOfPhrases[j]);
            }
            else
            {
                copyOfLetters.erase(find(copyOfLetters.begin(), copyOfLetters.end(), copyOfPhrases[j]));
            }
        }
    }

    for (int i = 0; i < letters.size(); i++)
    {
        cout << letters[i] << " ";
    }
    cout << endl
         << letters.size();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:01