「代码随想录算法训练营」第七天 | 字符串 part1
344. 反转字符串
题目链接:https://leetcode.cn/problems/reverse-string/
题目难度:简单
文章讲解:https://programmercarl.com/0344.反转字符串.html
视频讲解: https://www.bilibili.com/video/BV1fV4y17748
题目状态:过!
个人思路:
就是使用双指针,在right > left
的前提下将字符串遍历,并把right
和left
的值相互交换。
实现代码:
class Solution { public: void reverseString(vector<char>& s) { int left = 0; int right = s.size() - 1; while(right > left) { char tmp = s[left]; s[left] = s[right]; s[right] = tmp; left++; right--; } } };
541. 反转字符串 II
题目链接:https://leetcode.cn/problems/reverse-string-ii/
题目难度:简单
文章讲解:https://programmercarl.com/0541.反转字符串II.html
视频讲解: https://www.bilibili.com/video/BV1dT411j7NN
题目状态:过!!
个人思路:
看了半天的题目才看懂讲的什么意思,就是把字符串从前往后分为好几组,每组有k
个元素,并把第1组、第3组、第5组……进行反转,而把第2组、第4组、第6组……保持不变。而剩下的元素如果没有k
个元素,且处于奇数组中,将剩下的元素进行反转。看图示:
实现代码:
class Solution { public: string reverseStr(string s, int k) { if(s.size() <= k) { reverse(s.begin(), s.end()); return s; } int i = 1; while(k * i < s.size()) { reverse(s.begin() + k * (i - 1), s.begin() + k * i); i = i + 2; } reverse(s.begin() + k * (i - 1), s.end()); return s; } };
54. 替换数字(卡码网)
题目链接:https://kamacoder.com/problempage.php?pid=1064
文章讲解:https://programmercarl.com/kama54.替换数字.html
题目状态:过!!!
个人思路:
拿空间换时间,直接创建一个空字符串res
,判断输入的字符串元素是否为数字。若为数字,在res
后面接上一个number
,若不是数字,则在res
后面接入该元素。
代码实现:
#include <iostream> #include <string> using namespace std; using std::string; class Solution { public: string replaceNum(string s) { string res; for(auto &sCh : s) { if(!isdigit(sCh)) { res += sCh; } else { res += "number"; } } return res; } }; int main(void) { string s; cin >> s; Solution sol; cout << sol.replaceNum(s); }
第一次在卡码网上刷题,和力扣感觉不太一样。
合集:
「代码随想录算法训练营」
分类:
算法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡