「代码随想录算法训练营」第七天 | 字符串 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);
}
第一次在卡码网上刷题,和力扣感觉不太一样。