反转字符串
思路:利用双指针,一个指向第一个元素,叫做pre,另一个指向最后一个元素,叫做post,交换两个位置的值,再pre++,post--,直到post小于pre
class Solution {
public:
void reverseString(vector<char>& s) {
int n = s.size(); // vector数组长度
int pre = 0, post = n-1;
while (pre < post)
{
char item = s[pre];
s[pre] = s[post];
s[post] = item;
pre++;
post--;
}
}
};
反转字符串II
思路:首先让声明一个变量,让它指向第一个元素的位置,在判断一下从该位置到字符串的尾部之前有多少个字符,如果剩余字符大于k个,就把这k个字符反转,然后再让变量指向后移动2 * k字符对应的位置,否则,将剩余字符串全部反转
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.length();
int i = 0;
while (i < n)
{
int pre = 0 + i, post = k - 1 + i;
if (i + k <= n) // 剩余字符大于k个
{
while (pre < post)
{
char item = s[pre];
s[pre] = s[post];
s[post] = item;
pre++;
post--;
}
}
else // 剩余字符小于k个
{
post = n - 1;
while (pre < post)
{
char item = s[pre];
s[pre] = s[post];
s[post] = item;
pre++;
post--;
}
}
i += 2 * k;
}
return s;
}
};
替换空格
题目描述:实现一个函数,把字符串 s 中的每个空格替换成 %20
C++中,string是一个可变类型,因此可以在遍历字符串的过程中实现修改。
代码
class Solution {
public:
string replaceSpace(string s) {
int n = s.size();
for (int i = 0; i < n; i++)
{
if (s[i] == ' ')
{
s.append("**"); // add two placeholder.
s[i] = '%';
int j;
for (j = n + 1; j > i + 2; j--)
{
s[j] = s[j - 2];
}
s[i + 1] = '2';
s[i + 2] = '0';
n += 2; // important.
}
}
return s;
}
};