酷代码 AI
菜单

小 R 正在学习字符串处理。小 X 给了小 R 一个字符串 s,其中 s 仅包含小写英文字母及数字,且包含至少一个 1∼9 中的数字。小 X 希望小 R 使用 s 中的任意多个数字,按任意顺序拼成一个正整数。注意:小 R 可以选择 s 中相同的数字,但每个数字只能使用一次。例如,若 s 为 1a01b,则小 R 可以同时选择第 1,3,4 个字符,分别为 1,0,1,拼成正整数 101 或 110;但小 R 不能拼成正整数 111,因为 s 仅包含两个数字 1。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。 输入格式 输入的第一行包含一个字符串 s,表示小 X 给小 R 的字符串。 输出格式 输出一行一个正整数,表示小 R 能拼成的正整数的最大值。c++

```cpp #include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string s; cin >> s; string digits; // 提取字符串中的数字 for (char c : s) { if (isdigit(c) && c != '0') { digits += c; } } // 对提取的数字进行降序排序 sort(digits.begin(), digits.end(), greater<char>()); // 统计字符串中 0 的数量 int zeroCount = 0; for (char c : s) { if (c == '0') { zeroCount++; } } // 如果有非零数字,在排序后的数字后面添加所有的 0 if (!digits.empty()) { digits.append(zeroCount, '0'); } else { // 如果没有非零数字,最大的正整数就是 0 digits = "0"; } // 输出结果 cout << digits << endl; return 0; } ``` 代码解释: 1. 提取数字:通过遍历输入的字符串 `s`,将其中的非零数字添加到 `digits` 字符串中。 2. 排序:使用 `sort` 函数对 `digits` 字符串中的字符进行降序排序,以确保数字从大到小排列。 3. 统计 0 的数量:再次遍历字符串 `s`,统计其中 0 的数量。 4. 处理 0:如果 `digits` 不为空,在排序后的数字后面添加所有的 0;如果 `digits` 为空,说明没有非零数字,最大的正整数就是 0。 5. 输出结果:将最终的字符串 `digits` 输出。 复杂度分析: - 时间复杂度:$O(n log n)$,主要是排序操作的时间复杂度。 - 空间复杂度:$O(m)$,其中 $m$ 是字符串中数字的数量。 [2025-11-02 19:31:09 | AI问答 | 482点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多