leetcode-541. 反转字符串 II
文章目录
- leetcode-541. 反转字符串 II
-
- 一.题目描述
- 二.第1次提交(for循环,std::reverse)
- 三.第2次提交
- 四.第3次提交
- 五.第4次提交
- 六.代码随想录解答一
- 七.代码随想录解答二
- 八.代码随想录解答三
一.题目描述
二.第1次提交(for循环,std::reverse)
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)) {
if (i + k <= s.size()) {
reverse(s.begin() + i, s.begin() + i + k );
} else {
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)) {
if (i + k <= s.size()) {
reverse(s, i, i + k - 1);
continue;
}
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){
if(pos + k < n) reverse(s.begin() + pos, s.begin() + pos + k);
else reverse(s.begin() + pos,s.end());
pos += 2 * k;
}
return s;
}
};