算法训练营第十五天|344. 反转字符串
今日练习的题目和链接建议 本题是字符串基础题目就是考察 reverse 函数的实现同时也明确一下 平时刷题什么时候用 库函数什么时候 不用库函数题目链接https://leetcode.cn/problems/reverse-string/视频链接https://www.bilibili.com/video/BV1fV4y17748初步思考如果抛开“考察原理”这层限制C 程序员一行代码就能搞定reverse(s.begin(), s.end());但这道题的目的恰恰就是让你实现reverse的原理。所以直接调库就失去了练习的意义。深度思考什么时候用库函数这是一个经验问题我总结了一个简单原则✅ 可以用库函数的情况题目本身不考察该函数的实现比如两数之和你用unordered_map没问题因为题目考的是哈希表思想不是让你实现哈希表比如需要排序你用sort没问题排序不是题目的核心考点库函数只是辅助工具不掩盖核心逻辑比如需要交换两个数用swap没问题❌ 不该用库函数的情况题目明确要求手动实现比如这道题就是让你实现reverse比如实现strcpy、atoi等函数库函数会直接给出答案比如反转字符串你直接调reverse那这道题你还练了什么一句话原则如果库函数本身就是这道题的考点就不要调如果库函数只是解题的辅助工具大胆用。实现双指针法class Solution { public: void reverseString(vectorchar s) { int left 0; int right s.size() - 1; while (left right) { // 手写交换也可以用 swap(s[left], s[right]) char temp s[left]; s[left] s[right]; s[right] temp; left; right--; } } };几种交换方式的对比方法代码可读性推荐度临时变量char temp a; a b; b temp;⭐⭐⭐⭐⭐最推荐swap 函数swap(a, b);⭐⭐⭐⭐⭐推荐C 内置异或运算a ^ b; b ^ a; a ^ b;⭐⭐不推荐可读性差总结场景做法原因这道题手动实现双指针题目考的就是反转原理日常开发直接用reverse稳定、高效、不用重复造轮子面试中先问清楚“我可以直接用 reverse 吗”