C++实现将字符串中指定子串移动到最前端
### 🌟思路分析 本题的核心思路是在字符串 `s1` 中找出所有的子字符串 `s2`,将这些 `s2` 提取出来并移动到 `s1` 的最前端,同时移除 `s1` 中原来的 `s2` 部分。可以使用 `std::string` 的 `find` 方法来查找 `s2` 在 `s1` 中的位置,然后进行相应的字符串拼接和删除操作。 ### 💻代码实现 ```cpp #include <iostream> #include <string> std::string moveSubstringToFront(const std::string& s1, const std::string& s2) { std::string result; std::string remaining = s1; size_t pos = 0; // 找出所有的 s2 并添加到结果字符串的前面 while ((pos = remaining.find(s2)) != std::string::npos) { result += s2; remaining.erase(pos, s2.length()); } // 将剩余的部分添加到结果字符串的后面 result += remaining; return result; } int main() { std::string s1, s2; // 读取输入的字符串 s1 std::getline(std::cin, s1); // 读取输入的字符串 s2 std::getline(std::cin, s2); std::string newS1 = moveSubstringToFront(s1, s2); std::cout << newS1 << std::endl; return 0; } ``` ### 📝代码解释 1. **`moveSubstringToFront` 函数**: - `result` 用于存储最终的结果字符串。 - `remaining` 用于存储 `s1` 中还未处理的部分。 - 使用 `while` 循环和 `find` 方法找出 `s2` 在 `remaining` 中的位置。 - 每次找到 `s2` 后,将其添加到 `result` 中,并从 `remaining` 中删除。 - 最后将 `remaining` 中剩余的部分添加到 `result` 的后面。 2. **`main` 函数**: - 使用 `std::getline` 读取输入的字符串 `s1` 和 `s2`。 - 调用 `moveSubstringToFront` 函数处理字符串,并将结果存储在 `newS1` 中。 - 输出处理后的字符串 `newS1`。 ### ⚙️复杂度分析 - **时间复杂度**:$O(n * m)$,其中 $n$ 是 `s1` 的长度,$m$ 是 `s2` 的长度。因为每次调用 `find` 方法的时间复杂度是 $O(n)$,最多需要调用 $n/m$ 次。 - **空间复杂度**:$O(n)$,主要用于存储结果字符串。 ### 💡开发建议 - **边界情况处理**:在实际开发中,需要考虑 `s2` 为空字符串的情况,此时可以直接返回 `s1`。 - **性能优化**:如果 `s1` 和 `s2` 的长度非常大,可以考虑使用更高效的字符串匹配算法,如 KMP 算法,来提高查找效率。 ######[AI写代码神器 | 775点数解答 | 2026-07-03 21:13:44]
- C++ 求解:最少操作次数让字符串无子串 “friend” (字节豆包 | 153点数解答 | 2024-08-17 16:29:54)522
- C++ 求解:最少操作次数让字符串不再含 “friend” 子串!(讯飞星火 | 260点数解答 | 2024-08-17 16:30:49)513
- Python 巧解:最少操作次数让字符串告别“friend”子串(字节豆包 | 139点数解答 | 2024-08-18 13:04:14)449
- 3414 数字游戏:Python 求解 8 位 01 字符串中 1 的个数 (字节豆包 | 106点数解答 | 2024-10-27 14:23:27)471
- 巧用字符添加,计算字符串中“our”最大数量及开发注意要点(DeepSeek | 376点数解答 | 2025-10-30 19:20:06)125
- C 语言实现:处理字符串生成最多 “our” 串,附代码及关键开发注意点 (DeepSeek | 257点数解答 | 2025-10-30 19:20:36)179
- Python开发必备:字符串、列表、元组、字典常用的5个方法大揭秘!(阿里通义 | 325点数解答 | 2023-11-08 00:51:48)285
- Java技巧:轻松将字符串“.88”转换成BigDecimal对象(阿里通义 | 101点数解答 | 2024-01-29 14:48:51)323
- 求解字符串“ss”消除“friend”子串的最少操作次数,关键信息待明确!(字节豆包 | 130点数解答 | 2024-08-18 13:03:50)301
- JS实现数组 ['0', '3'] 到多种格式字符串转换全攻略(百度文心 | 511点数解答 | 2024-10-15 11:05:43)207
- Java 实现后端接收表单数据、创建实体类与接口完成用户注册功能示例(字节豆包 | 356点数解答 | 2024-10-30 11:06:15)231
- Python 正则表达式:从“文本+数字+顿号”字符串中精准提取内容(字节豆包 | 218点数解答 | 2024-11-07 12:17:47)247