LeetCode题目链接
https://leetcode.cn/problems/reverse-string/description/
https://leetcode.cn/problems/reverse-string-ii/description/
https://kamacoder.com/problempage.php?pid=1064
题解
344.反转字符串
受到了之前写的代码的启发(只因为意外的瞄了一眼),升华一下,用了双指针的方法写出来。之后再看看题解学一下有没有别的思路。
541.反转字符串II
本来觉得自己能写出来,但是突然不会了。想了一个繁琐的思路出来,还被AI提示了一句reverse库函数,其中的right的i - k - 1值,是debug调出来的。主要是判断结尾剩余字符串的大小赋值,以及要想到双指针确定边界的思路。
卡码网:54.替换数字
这题有两个思路,一是我第一次写的,调用插入库函数在原字符串进行插入“number”和删除数字,第二个是我本次写的,用字符串连接组成一个新字符串。
代码
//344.反转字符串
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
void reverseString(vector<char>& s) {
int left = 0, right = s.size() - 1;
while (left <= right) {
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
};
int main() {
vector<char> str = { 'h', 'e', 'l', 'l', 'o' };
for (int i = 0;i < str.size();i++) {
printf("%c", str[i]);
}
printf("\n");
Solution s;
s.reverseString(str);
for (int i = 0;i < str.size();i++) {
printf("%c", str[i]);
}
return 0;
}
//541.反转字符串II
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string reverseStr(string s, int k) {
int i = 0;
while (1) {
i += 2 * k;
if (i <= s.size()) {
int left = i - 2 * k, right = i - k - 1;
reverse(s.begin() + left, s.begin() + right + 1);
}
else{
int left = i - 2 * k;
int right;
if (s.size() - left < k) right = s.size() - 1;
else right = i - k - 1;
reverse(s.begin() + left, s.begin() + right + 1);
break;
}
}
return s;
}
};
int main() {
string str = "abcd";
int k = 2;
Solution s;
string result = s.reverseStr(str, k);
cout << result << endl;
return 0;
}
//卡码网:54.替换数字
#include <iostream>
#include <string>
using namespace std;
string insertNumber(string s) {
string result;
for (int i = 0;i < s.size();i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
result += s[i];
}
else {
result += "number";
}
}
return result;
}
int main() {
string str;
cin >> str;
string result = insertNumber(str);
cout << result << endl;
return 0;
}