匆忙补打卡的一天。最近好忙,要是没有组会,没有论文就好了
344.反转字符串
这道题比较简单,用双指针的办法就可以解决,代码如下:
class Solution {
public:
void reverseString(vector<char>& s) {
int left = 0, right = s.size()-1;
while(left < right)
{
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
};
或者直接使用交换函数:
class Solution {
public:
void reverseString(vector<char>& s) {
int left = 0, right = s.size()-1;
while(left < right)
{
swap(s[left++],s[right--]);
}
}
};
541. 反转字符串II
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += (2 * k)) {
// 1. 每隔 2k 个字符的前 k 个字符进行反转
// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k );
} else {
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
剑指Offer 05.替换空格
class Solution {
public:
string replaceSpace(string s) {
int oldsize = s.size();
int count = 0;
for(int i = 0;i < s.size();i++)
{
if(s[i] == ' ')
{
count++;
}
}
s.resize(s.size() + 2 * count);
int newsize = s.size();
int right = s.size()-1,left = oldsize-1;
for(int left=oldsize-1,right=newsize - 1;left<right;left--,right--)
{
if(s[left] == ' ')
{
s[right] = '0';
s[right-1] = '2';
s[right-2] = '%';
right = right - 2;
}
else
s[right] = s[left];
}
return s;
}
};
151.翻转字符串里的单词
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]);
}
}
void removeExtraSpaces(string& s) {
int slow = 0;
for (int i = 0; i < s.size(); ++i) {
if (s[i] != ' ') {
if (slow != 0) s[slow++] = ' ';
while (i < s.size() && s[i] != ' ') {
s[slow++] = s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removeExtraSpaces(s);
reverse(s, 0, s.size() - 1);
int start = 0;
for (int i = 0; i <= s.size(); ++i) {
if (i == s.size() || s[i] == ' ') {
reverse(s, start, i - 1);
start = i + 1;
}
}
return s;
}
};
剑指Offer58-II.左旋转字符串
这道题分为三个步骤:
反转区间为前n的子串
反转区间为n到末尾的子串
反转整个字符串
具体代码如下:
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;
}
};