Reverse String II
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”
Restriction:
1、The string consists of lower English letters only.
2、Length of the given string and k will in the range [1, 10000]
思路和文章7反转字符串中的单词类似,首先先想到了用栈。
复杂度至少是O(n),必须要扫描一遍字符串;
外循环以2k为间隔,前两个内循环作用分别是做到了前k个反转,后k个累加。
反转用栈,保持原顺序累加用队列。
接着两次循环把栈和队列中的字符累加到字符串res中
class Solution {
public:
string reverseStr(string s, int k) {
string res = "";
stack<char> st;
queue<char> qe;
for(int i = 0;i< s.length() ; i = i+ (2*k))
{
for(int j = 0;j<k && (i+j)<s.length();j++)
{
st.push(s[i+j]);
}
for(int j = 0;j<k && (i+j+k)<s.length();j++)
{
qe.push(s[i+j+k]);
}
while(!st.empty())
{
res += st.top();
st.pop();
}
while(!qe.empty())
{
res += qe.front();
qe.pop();
}
}
return res;
}
};
比较纳闷,为啥我在leetcode上的内存消耗永远是几乎打败0.00%