题目:
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]
题目分析:好像是没什么需要分析的吧~~~
class Solution {
public:
string reverse(string str,int length)//这是简单的逆置字符串的算法
{
for (int i = 0; i < length / 2; ++i)
{
str[length] = str[i];
str[i] = str[length - 1 - i];
str[length - 1 - i] = str[length];
}
return str;
}
string reverseStr(string s, int k) {
int len=s.length();
string temp="";
int count=0;
while(len>0)
{
if(len>=2*k)//三种情况
{
string temp1=s.substr(count,k);
temp1=reverse(temp1,k);//一半逆置
temp=temp+temp1;
count+=k;
string temp2=s.substr(count,k);
temp=temp+temp2;//一半直接粘贴
len-=(2*k);
count+=k;
if(len==0) return temp;
}
else if(len<2*k&&len>=k)
{
string temp1=s.substr(count,k);
temp1=reverse(temp1,k);
temp=temp+temp1;
count+=k;
string temp2=s.substr(count);
temp=temp+temp2;
return temp;
}
else if(len<k)
{
string temp1=s.substr(count,len);
temp1=reverse(temp1,len);
temp=temp+temp1;
return temp;
}
}
}
};