leetcode-541. 反转字符串 II
一.题目描述
文章来源:https://www.toymoban.com/news/detail-566401.html
二.第1次提交(for循环,std::reverse)
文章来源地址https://www.toymoban.com/news/detail-566401.html
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += 2 * k) {
if ((s.size() - i) < k) {
reverse(s.begin() + i, s.end());
} else if ((s.size() - i) >= k && (s.size() - i) < 2 * k) {
reverse(s.begin() + i, s.begin() + i + k);
} else {
reverse(s.begin() + i, s.begin() + i + k);
}
}
return s;
}
};
三.第2次提交
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += 2 * k) {
if ((s.size() - (i + 1)) < k) {
reverse(s.begin() + i, s.end());
} else if ((s.size() - (i + 1)) < 2 * k && (s.size() - (i + 1)) >= k) {
reverse(s.begin() + i, s.begin() + i + k);
} else if ((i + 2 * k) < s.size()) {
reverse(s.begin() + i, s.begin() + i + k);
}
}
return s;
}
};
四.第3次提交
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i = i + 2 * k) {
if (i + 2 * k < (s.size())) {
reverse(s.begin() + i, s.begin() + i + k);
} else if (s.size() - i < k) {
reverse(s.begin() + i, s.end());
} else {
reverse(s.begin() + i, s.begin() + i + k);
}
}
return s;
}
};
五.第4次提交
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i = i + 2 * k) {
if (2 * k < (s.size() - i)) {
reverse(s.begin() + i, s.begin() + i + k);
} else if (s.size() - i < k) {
reverse(s.begin() + i, s.end());
} else {
reverse(s.begin() + i, s.begin() + i + k);
}
}
return s;
}
};
六.代码随想录解答一
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;
}
};
七.代码随想录解答二
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]);
}
}
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, i, i + k - 1);
continue;
}
// 3. 剩余字符少于 k 个,则将剩余字符全部反转。
reverse(s, i, s.size() - 1);
}
return s;
}
};
八.代码随想录解答三
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size(),pos = 0;
while(pos < n){
//剩余字符串大于等于k的情况
if(pos + k < n) reverse(s.begin() + pos, s.begin() + pos + k);
//剩余字符串不足k的情况
else reverse(s.begin() + pos,s.end());
pos += 2 * k;
}
return s;
}
};
到了这里,关于leetcode-541. 反转字符串 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!