原题链接:https://leetcode.com/problems/reverse-string-ii/description/
描述:
Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.
Example:
Input: s = “abcdefg”, k = 2
Output: “bacdfeg”
Restrictions:
The string consists of lower English letters only.
Length of the given string and k will in the range [1, 10000]
Solution:
本题理解比较简单,就是每2k个元素翻转前k个,采用的是比较笨直接数的方法通过的,并没有很耐心的去找规律,代码如下:
#include <iostream>
#include <string>
using namespace std;
string reverseStr(string s, int k) {
int len = s.size();
string str = s, res = "";
while (len > 2 * k) {
string temp = str.substr(0, 2 * k);
reverse(temp.begin(), temp.begin() + k);
res += temp;
str = str.substr(2 * k);
len = len - 2 * k;
}
if (len < k) {
reverse(str.begin(), str.end());
res += str;
}
else {
reverse(str.begin(), str.begin() + k);
res += str;
}
return res;
}
int main()
{
string s;
int k;
cin >> s >> k;
cout << reverseStr(s, k) << endl;
system("pause");
return 0;
}