1.题目:leetcode344
非常简单:
class Solution {
public:
void reverseString(vector<char>& s) {
for (int i = 0, j = s.size() - 1; i < j; i++, j--) {
swap(s[i],s[j]);
}
}
};
2.题目:leetcode541
思路:基本上就是调用题目1的函数,但是需要注意的是反转边界的处理,还有每次递进选择的值大小
代码:
class Solution {
public:
void reverse(string& s, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
if (i + k <= s.size()) {
reverse(s, i, i + k - 1);
continue;
}
reverse(s, i, s.size() - 1);
}
return s;
}
};
3.题目:卡码54
思路:
代码:
#include<iostream>
using namespace std;
int main() {
string s;
cin>>s;
int count = 0;
for(int i=0;i<s.size();i++){
if(s[i]-'a'<0){
count+=6;
}else{
count++;
}
}
string news(count, '\0');
for(int i=0,j =0;i<s.size();i++){
if(s[i]-'a'<0){
news[j] ='n';
news[j+1] ='u';
news[j+2] = 'm';
news[j+3] = 'b';
news[j+4] = 'e';
news[j+5] = 'r';
j += 6;
}else{
news[j] = s[i];
j++;
}
}
std::cout << news << std::endl;
return 0;
}
4.题目:leetcode151
思路:我觉得这个用java写非常好,很简洁,(偷懒ing.用C++写的话代码长很多,但是性能有一定提升,记得多花时间看看。
代码:
class Solution {
public String reverseWords(String s) {
String[] strs = s.trim().split(" "); // 删除首尾空格,分割字符串
StringBuilder res = new StringBuilder();
for (int i = strs.length - 1; i >= 0; i--) { // 倒序遍历单词列表
if (strs[i].equals("")) continue; // 遇到空单词则跳过
res.append(strs[i] + " "); // 将单词拼接至 StringBuilder
}
return res.toString().trim();
}
}
5.题目:卡码55
代码:
// 版本一
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n;
string s;
cin >> n;
cin >> s;
int len = s.size(); //获取长度
reverse(s.begin(), s.end()); // 整体反转
reverse(s.begin(), s.begin() + n); // 先反转前一段,长度n
reverse(s.begin() + n, s.end()); // 再反转后一段
cout << s << endl;
}