1、LeetCode344
class Solution {
public:
void reverseString(vector<char>& s) {
int i = 0, j = s.size() - 1;
char temp;
while (i < j) {
temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
};
2、LeetCode541
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.length(); i += 2 * k) {
int left = i, right;
if (i + k < s.length()) {
right = i + k -1;
} else {
right = s.length() - 1;
}
while (left < right) {
swap(s[left++], s[right--]);
}
}
return s;
}
};
3、剑指offer05
resize() 将容器的容量设置为n。
vector<int> vector1;
vector1.resize(3)
此时vector1为(0,0,0),代码继续写
vector1.resize(7,1)
此时vector1为(0,0,0,1,1,1,1)。这里第一个参数7,是指将vector1的容量从3改成7,扩容的部分设置为1。继续写
vector1.resize(5)
此时vector1为(0,0,0,1,1),容量再缩成5。继续写
vector1.resize(4)
for(int i=0;i<3;i++)vector1.push_back(2*i);
此时vector1为(0,0,0,1,0,2,4)
class Solution {
public:
string replaceSpace(string s) {
int count = 0;
int len1 = s.length();
for (int i = 0; i < len1; i++) {
if (s[i] == ' ') count++;
}
s.resize(len1 + 2 * count);
for (int i = len1 - 1, j = s.length() - 1; i >= 0; i--, j--) {
if (s[i] == ' ') {
s[j--] = '0';
s[j--] = '2';
s[j] = '%';
} else {
s[j] = s[i];
}
}
return s;
}
};
4、LeetCode151
class Solution {
public:
string reverse(string s) {
int left = 0, right = s.size() - 1;
while (left < right) {
swap(s[left], s[right]);
right--;
left++;
}
return s;
}
string reverseWords(string s) {
s = reverse(s);
int fast = 0, slow = 0;
for (; fast < s.size(); fast++) {
if (s[fast] != ' ') { // 当字符为非空格时,进行处理
if (slow != 0) s[slow++] = ' '; // 首字符不能为空格,保证每个字符前为空格
while (fast < s.size() && s[fast] != ' ') {
s[slow++] = s[fast++];
}
}
}
s.resize(slow);
int left = 0, right;
for (int i = 0; i <= s.size(); i++) {
if (s[i] != ' ' && i != s.size()) {
continue;
} else {
right = i - 1;
while (left < right) {
swap(s[left], s[right]);
left++;
right--;
}
left = i + 1;
}
}
return s;
}
};
5、剑指offer58
class Solution {
public:
string reverseLeftWords(string s, int n) {
// 先将整个字符串反转
for (int i = 0, j = s.length() - 1; i < s.length() / 2; i++, j--) {
swap(s[i], s[j]);
}
// 将前面s.length()-n个字符反转
for (int i = 0, j = s.length() - n -1; i < (s.length() - n) / 2; i++, j--) {
swap(s[i], s[j]);
}
// 将后半部分字符反转
for (int i = s.length() - n, j = s.length() - 1; i < s.length() - (n + 1) / 2; i++, j--) {
swap(s[i], s[j]);
}
return s;
}
};