代码随想录算法训练营day08|344.反转字符串,541.反转字符串II,卡码网:54.替换数字
1.代码随想录算法训练营day01|704. 二分查找,27. 移除元素,977.有序数组的平方2.代码随想录算法训练营day02|209.长度最小的子数组,59.螺旋矩阵II3.代码随想录算法训练营day03|203.移除链表元素,707.设计链表,206.反转链表4.代码随想录算法训练营day04|24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07.链表相交,142.环形链表II5.代码随想录算法训练营day06|242.有效的字母异位词,349.两个数组的交集,202.快乐数,1.两数之和6.代码随想录算法训练营day07|454.四数相加II,383.赎金信,15.三数之和,18.四数之和
7.代码随想录算法训练营day08|344.反转字符串,541.反转字符串II,卡码网:54.替换数字
8.代码随想录算法训练营day09|151.翻转字符串里的单词,卡码网:55.右旋转字符串,28.实现 strStr(),459.重复的子字符串344.反转字符串
题目链接:https://leetcode.cn/problems/reverse-string/description/
我的代码:
class Solution { public: void reverseString(vector<char>& s) { for (int i = 0; i < s.size() / 2; i++) { char temp = s[i]; s[i] = s[s.size() - 1 - i]; s[s.size() - 1 - i] = temp; } } };
使用swap库函数:
class Solution { public: void reverseString(vector<char>& s) { for (int i = 0, j = s.size() - 1; i < s.size() / 2; i++, j--) { swap(s[i], s[j]); } } };
注意边界条件。
541.反转字符串II
题目链接:https://leetcode.cn/problems/reverse-string-ii/description/
使用reverse库函数:
class Solution { public: string reverseStr(string s, int k) { for (int i = 0; i < s.size(); i += 2 * k) { if (i + k <= s.size()) { reverse(s.begin() + i, s.begin() + i + k); } else { reverse(s.begin() + i, s.end()); } } return s; } };
i += 2 * k实现按段反转字符串。
自己实现reverse库函数:
class Solution { public: string reverse(string& s, int start, int end) { // 注意这里是string& s,需要直接修改s,而不是返回一个新的字符串 for (int i = start, j = end; i < j; i++, j--) { swap(s[i], s[j]); } return s; } string reverseStr(string s, int k) { for (int i = 0; i < s.size(); i += 2 * k) { if (i + k <= s.size()) { reverse(s, i, i + k - 1); } else { reverse(s, i, s.size() - 1); } } return s; } };
自己实现reverse函数要注意直接修改引用s的值。
另一种思路:
class Solution { public: string reverseStr(string s, int k) { int n = s.size(), pos = 0; while (pos < n) { if (pos + k < n) { reverse(s.begin() + pos, s.begin() + pos + k); } else { reverse(s.begin() + pos, s.end()); } pos += 2 * k; } return s; } };
注意边界条件。
卡码网:54.替换数字
题目链接:https://kamacoder.com/problempage.php?pid=1064
我的代码:
#include <iostream> using namespace std; int main() { string s; cin >> s; int count = 0; int sOldsize = s.size() - 1; for (int i = 0; i < s.size(); i++) { if (s[i] >= '0' && s[i] <= '9') count++; } s.resize(s.size() + count * 5); int sNewsize = s.size() - 1; while (sNewsize >= 0) { if (s[sOldsize] >= '0' && s[sOldsize] <= '9') { s[sNewsize--] = 'r'; s[sNewsize--] = 'e'; s[sNewsize--] = 'b'; s[sNewsize--] = 'm'; s[sNewsize--] = 'u'; s[sNewsize--] = 'n'; } else { s[sNewsize--] = s[sOldsize]; } sOldsize--; } cout << s << endl; return 0; }
先统计字符串中数字个数,然后扩充数组容量,从后向前添加字符。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!