344.反转字符串
方法一:直接使用库函数
代码如下:
class Solution {
public:
void reverseString(vector<char>& s) { //方法一:库函数
reverse(s.begin(), s.end());
}
};
方法二:遍历
代码如下:
class Solution {
public:
void reverseString(vector<char>& s) { //方法二:遍历
int i = 0;
int j = s.size() - 1;
while (i < j) {
swap(s[i], s[j]);
i++;
j--;
}
}
};
完整代码如下:
#include <iostream>
#include <vector>
using namespace std;
// class Solution {
// public:
// void reverseString(vector<char>& s) { //方法一:库函数
// reverse(s.begin(), s.end());
// }
// };
class Solution {
public:
void reverseString(vector<char>& s) { //方法二:遍历
int i = 0;
int j = s.size() - 1;
while (i < j) {
swap(s[i], s[j]);
i++;
j--;
}
}
};
int main() {
vector<char> s;
s.push_back('h');
s.push_back('e');
s.push_back('l');
s.push_back('l');
s.push_back('o');
Solution sol;
sol.reverseString(s);
for (int i = 0; i < s.size(); i++) {
cout << s[i] << " ";
}
cout << endl;
}
541.反转字符串2
代码如下:
class Solution {
public:
string reverseStr(string s, int k) { //这个题目出得不好,题意清晰
for (int i = 0; i < s.size(); i = i + 2 * k) {
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k);
} else {
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
完整代码如下:
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string reverseStr(string s, int k) { //这个题目出得不好,题意清晰
for (int i = 0; i < s.size(); i = i + 2 * k) {
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k);
} else {
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
int main() {
string s = "jlnnxsetgcpsbhsfymrkhfursyissjnsocgdhgfxtxrlvugsaphqzxllwebukgatzfybprfmmfithphccxfsogsgqsnvckjvnskk";
int k = 20;
cout << s.size() << endl;
Solution sol;
string ans = sol.reverseStr(s, k);
cout << ans << endl;
}
剑指offer05替换空格
代码如下:
class Solution {
public:
string replaceSpace(string s) {
//统计字符串中空格出现的次数
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
count++;
}
}
//将字符串扩容
int oldSize = s.size();
s.resize(s.size() + 2 * count);
int newSize = s.size();
//从后往前用双指针重新给字符串赋值
for (int fast = oldSize - 1, slow = newSize - 1; fast < slow; i--, j--) {
if (s[fast] != ' ') {
s[slow] = s[fast];
} else if (s[fast] == ' ') {
s[slow] = '0';
s[slow - 1] = '2';
s[slow - 2] = '%';
slow -= 2;
}
}
return s;
}
};
完整代码如下:
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string replaceSpace(string s) {
//统计字符串中空格出现的次数
int count = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
count++;
}
}
//将字符串扩容
int oldSize = s.size();
s.resize(s.size() + 2 * count);
int newSize = s.size();
//从后往前用双指针重新给字符串赋值
for (int fast = oldSize - 1, slow = newSize - 1; fast < slow; i--, j--) {
if (s[fast] != ' ') {
s[slow] = s[fast];
} else if (s[fast] == ' ') {
s[slow] = '0';
s[slow - 1] = '2';
s[slow - 2] = '%';
slow -= 2;
}
}
return s;
}
};
int main() {
string s = "We are happy";
string m = "%20";
Solution sol;
string ans = sol.replaceSpace(s);
cout << ans << endl;
}
151.翻转字符串里的单词
代码如下:
class Solution {
public:
string reverseWords(string s) { //双指针去除多余的空格
int slow = 0;
for (int i = 0; i < s.size(); ++i) { //
if (s[i] != ' ') { //遇到非空格就处理,即删除所有空格。
if (slow != 0) s[slow++] = ' '; //手动控制空格,给单词之间添加空格。slow != 0说明不是第一个单词,需要在单词前添加空格。
while (i < s.size() && s[i] != ' ') { //补上该单词,遇到空格说明单词结束。
s[slow++] = s[i++];
}
}
}
s.resize(slow); //重新调整字符串大小
reverse(s.begin(), s.end());
int start = 0;
for (int i = 0; i <= s.size(); i++) {
if (i == s.size() || s[i] == ' ') {
reverse(s.begin() + start, s.begin() + i); // 逆序每个单词
start = i + 1;
}
}
return s;
}
};
完整代码如下:
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string reverseWords(string s) { //双指针去除多余的空格
int slow = 0;
for (int i = 0; i < s.size(); ++i) { //
if (s[i] != ' ') { //遇到非空格就处理,即删除所有空格。
if (slow != 0) s[slow++] = ' '; //手动控制空格,给单词之间添加空格。slow != 0说明不是第一个单词,需要在单词前添加空格。
while (i < s.size() && s[i] != ' ') { //补上该单词,遇到空格说明单词结束。
s[slow++] = s[i++];
}
}
}
s.resize(slow); //重新调整字符串大小
reverse(s.begin(), s.end());
int start = 0;
for (int i = 0; i <= s.size(); i++) {
if (i == s.size() || s[i] == ' ') {
reverse(s.begin() + start, s.begin() + i); // 逆序每个单词
start = i + 1;
}
}
return s;
}
};
int main() {
Solution sol;
string s = " hello world ";
string ans = sol.reverseWords(s);
cout << ans << endl;
}
剑指offer58左旋转字符串
方法一:使用一个新的字符串来存
代码如下:
class Solution {
public:
string reverseLeftWords(string s, int n) { //方法一:使用一个新字符串来存储修改后的字符串
string result(s.size(), ' '); //字符串需要初始化
int j = 0;
for (int i = n; i < s.size(); i++) {
result[j] = s[i];
j++;
}
for (int i = 0; i < n; i++) {
result[j] = s[i];
j++;
}
return result;
}
};
方法二:直接在原字符串上修改
代码如下:
class Solution {
public:
string reverseLeftWords(string s, int n) { //方法二:直接在原字符串上修改
reverse(s.begin(), s.begin() + n);
reverse(s.begin() + n, s.end());
reverse(s.begin(), s.end());
return s;
}
};
今毕。