代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串中第一个匹配项的下标、459.重复的子字符串
1.代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素2.代码随想录算法训练营第二天| 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II3.代码随想录算法训练营第四天| 203. 移除链表元素、707.设计链表、206.反转链表4.代码随想录算法训练营第五天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交(同160题)、142.环形链表Ⅱ5.代码随想录算法训练营第六天| 242. 有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和6.代码随想录算法训练营第七天| 454. 两数相加Ⅱ、383.赎金信、15.三数之和、18.四数之和7.代码随想录算法训练营第八天|344.反转字符串、541.反转字符串Ⅱ、54.替换数字(卡码网是真滴不好用)
8.代码随想录算法训练营第九天|151.反转字符串中的单词、55.右旋字符串、28.找出字符串中第一个匹配项的下标、459.重复的子字符串
9.代码随想录算法训练营第十一天|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项10.代码随想录算法训练营第十二天|150.逆波兰表达式求值、239.滑动窗口最大值、347.前k个高频元素11.代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、515、116、117、104、11112.代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 (优先掌握递归)、111.二叉树的最小深度13.代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数151以前写过 很呆的写法 但能用 嘿
1 class Solution { 2 public: 3 string reverseWords(string s) { 4 // 初始化变量 5 vector<vector<int>> data; // 存储单词的起始地址和长度 6 string ans; // 最终结果字符串 7 int num = 0; // 单词个数 8 int start = 0; // 当前单词起始位置 9 int len = 0; // 当前单词长度 10 int flag = 0; // 标记是否正在统计单词 11 int sum = 0; // 输出结果所需的总长度 12 int h = 0; // ans 的当前填充位置索引 13 14 // 遍历输入字符串 s 15 for (int i = 0; i < s.size(); ++i) { 16 if (s[i] != ' ' && flag == 0) { 17 // 开始统计新单词 18 flag = 1; 19 start = i; 20 len = 1; 21 } else if (s[i] != ' ' && flag == 1) { 22 // 继续统计当前单词长度 23 ++len; 24 } else if (s[i] == ' ' && flag == 1) { 25 // 当前单词结束,存储起始地址和长度,并更新 sum 和 num 26 sum += len + 1; // 加 1 是为了留出空格的位置 27 ++num; 28 data.push_back({start, len}); 29 // 重置 start, len, flag 30 start = 0; 31 len = 0; 32 flag = 0; 33 } 34 } 35 36 // 处理最后一个单词 37 if (flag == 1) { 38 sum += len + 1; 39 ++num; 40 data.push_back({start, len}); 41 } 42 43 // 调整 ans 的大小,预留足够的空间 44 ans.resize(sum); 45 46 // 构造逆序输出的结果字符串 47 for (int j = num - 1; j >= 0; --j) { 48 for (int k = 0; k < data[j][1]; ++k) { 49 ans[h++] = s[data[j][0] + k]; 50 } 51 ans[h++] = ' '; // 单词之间添加空格 52 } 53 54 if (!ans.empty()) { 55 ans.pop_back(); // 去除末尾多余的空格 56 } 57 58 return ans; 59 } 60 };
55用到了额外空间 记录一下元素 再搬运回去
1 class Solution { 2 public: 3 string rotateRight(string s, int k) { 4 int n = s.size(); 5 k = k % n; // 获取有效的右旋转步数 6 7 // 特殊情况处理 8 if (n <= 1 || k == 0) { 9 return s; 10 } 11 12 // 创建一个 vector 存放后 k 个字符 13 vector<char> lastK; 14 for (int i = n - k; i < n; ++i) { 15 lastK.push_back(s[i]); 16 } 17 18 // 后移原字符串的前 n-k 个字符 19 for (int i = n - 1; i >= k; --i) { 20 s[i] = s[i - k]; 21 } 22 23 // 填补前 k 个位置 24 for (int i = 0; i < k; ++i) { 25 s[i] = lastK[i]; 26 } 27 28 return s; 29 } 30 };
28题没有用kmp算法 是硬匹配的
1 class Solution { 2 public: 3 int strStr(string haystack, string needle) { 4 int len1 = haystack.size(); 5 int len2 = needle.size(); 6 7 // 如果 haystack 的长度小于 needle 的长度,直接返回 -1 8 if (len1 < len2) { 9 return -1; 10 } 11 12 int i = 0; // 指向 haystack 的指针 13 int j = 0; // 指向 needle 的指针 14 15 while (i < len1) { 16 if (haystack[i] == needle[0]) { // 当找到 needle 的首字符在 haystack 中匹配时 17 int temp = i; // 记录当前位置 i 18 while (j < len2) { 19 if (temp >= len1) { 20 return -1; // 如果 temp 超出了 haystack 的长度,返回 -1 21 } 22 if (haystack[temp] == needle[j]) { // 逐字符比较 haystack 和 needle 23 j++; 24 temp++; 25 } else { 26 break; // 一旦发现不匹配,跳出循环 27 } 28 } 29 if (j == len2) { // 如果 j 等于 len2,说明完全匹配 30 return i; 31 } 32 } 33 j = 0; // 重置 j 34 i++; // 指针 i 后移一位 35 } 36 37 return -1; // 如果找不到匹配,返回 -1 38 } 39 };
459题也是以前的写法 没有用到kmp
1 class Solution { 2 public: 3 bool repeatedSubstringPattern(string s) { 4 int len = s.size();//求长度 5 for (int i = 1; i <= len/2; ++i) {//字串长度绝对不会超过一半 6 if (len % i == 0) {//字串长度必然是总长度的因数 7 bool match = true;//是个匹配是否成功的标志 8 for (int j = i; j < len; ++j) {//一点点匹配 9 if (s[j] != s[j - i]) {//很妙啊 s[j]!=s[j-i] 一直保持i长度进行验证 10 match = false; 11 break; 12 } 13 } 14 if (match) { 15 return true; 16 } 17 } 18 } 19 return false; 20 } 21 };
自在飞花轻似梦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!