这一次刷题,让我学会了剪枝,和相关条件判断,还有对字符串全部翻转,和短翻转的过程,双指针在字符串中的应用
http://L344.反转字符串https://leetcode.cn/problems/reverse-string/
class Solution
{
public:
void reverseString(vector<char>& s)
{
int fistpoint = 0;
int finallypoint = s.size() - 1;
while (fistpoint < finallypoint)
{
char temp = s[fistpoint];
s[fistpoint] = s[finallypoint];
s[finallypoint] = temp;
fistpoint++;
finallypoint--;
}
}
};
http://L541. 反转字符串IIhttps://leetcode.cn/problems/reverse-string-ii/
class Solution {
public:
string reverseStr(string s, int k)
{
int n = s.size();
for (int i = 0; i < n; i += 2 * k)
{
reverse(s.begin() + i, s.begin() + min(n, i + k));
}
}
};
http://剑指 Offer 05. 替换空格https://leetcode.cn/problems/ti-huan-kong-ge-lcof/
class Solution {
public:
string replaceSpace(string&s) {
int count = 0;
int old = s.size();
for (int i = 0; i < s.size(); i++)
{
if (s[i] == ' ')
{
count++;
}
}
s.resize(s.size() + count * 2);
//只能从后面一个一个往前面数
for (int i = s.size() - 1, j = old - 1; j < i; i--, j--)
{
if (s[j] != ' ')
{
s[i] = s[j];
}
else {
s[i] = '0';
s[i - 1] = '2';
s[i - 2] = '%';
i -= 2;
}
}
return s;
}
};
http://151. 反转字符串中的单词https://leetcode.cn/problems/reverse-words-in-a-string/
class Solution {
public:
void ereverse(string& s, int start, int end)
{
for (int i = start, j = end; i < j; i++, j--)
{
swap(s[i], s[j]);
}
}
void removeSpace(string& s)
{
int slow = 0;
for (int i = 0; i < s.size(); i++)
{
if (s[i] != ' ')
{
if (slow!= 0)
{
s[slow] = ' ';
slow++;
}
while (i < s.size() && s[i] != ' ')
{
s[slow++] = s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string &s)
{
removeSpace(s);
ereverse(s, 0, s.size() - 1);//将整个字符串都进行一个反转
int start = 0;
for (int i = 0; i <=s.size(); i++)
{
if (i == s.size() || s[i] == ' ')
{
ereverse(s, start, i - 1);
start = i + 1;
}
}
return s;
}
};
http://剑指 Offer 58 - II. 左旋转字符串https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
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;
}
};