「代码随想录算法训练营」第七天 | 字符串 part1

344. 反转字符串

题目链接:https://leetcode.cn/problems/reverse-string/
题目难度:简单
文章讲解:https://programmercarl.com/0344.反转字符串.html
视频讲解: https://www.bilibili.com/video/BV1fV4y17748
题目状态:过!

个人思路:

就是使用双指针,在right > left的前提下将字符串遍历,并把rightleft的值相互交换。

实现代码:

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);
}

第一次在卡码网上刷题,和力扣感觉不太一样。

posted @   云雀AC了一整天  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡
点击右上角即可分享
微信分享提示