String Algorithm: Reverse the first k characters for every 2k ch
- 时间:2020-09-23 15:11:59
- 分类:网络文摘
- 阅读:120 次
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]
The problem statement is actually a bit hard to understand, but once you get it, this problem is easy to solve.
How to Reverse string in C++ using std::reverse for the first k characters?
The std::C++ has a handy reverse method that takes two iterators, and reverse it. Thus, we can iterate from the start, and increment the step of 2*k, compute the range, which is then passed to the reverse function to do the work.
1 2 3 4 5 6 7 8 9 10 | class Solution { public: string reverseStr(string s, int k) { for (int i = 0; i < s.size(); i += 2 * k) { int a = i, b = min(i + k, (int)s.size()); reverse(begin(s) + a, begin(s) + b); } return s; } }; |
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += 2 * k) {
int a = i, b = min(i + k, (int)s.size());
reverse(begin(s) + a, begin(s) + b);
}
return s;
}
};You can also use a two pointer to swap until they meet in the middle.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public: string reverseStr(string s, int k) { for (int i = 0; i < s.size(); i += 2 * k) { int a = i, b = min(i + k, (int)s.size()); int left = a, right = b - 1; while (left < right) { swap(s[left ++], s[right --]); } } return s; } }; |
class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0; i < s.size(); i += 2 * k) {
int a = i, b = min(i + k, (int)s.size());
int left = a, right = b - 1;
while (left < right) {
swap(s[left ++], s[right --]);
}
}
return s;
}
};Other string reversing algorithms:
- How to Reverse Words in a String in Place using C++ std::reverse?
- How to Reverse Words in a String?
- How to Reverse Only Letters in a String?
- How to Reverse Vowels of a String in C/C++?
- Reverse String in C/C++
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:观《雪景》有感 清晨的雾的作文 题目生命 温暖的谎言作文800字 自恋而自信的人生 襄王不许请隧原文及翻译 召公谏厉王止谤原文及翻译 百家讲坛系列节目《于丹〈论语〉心得》MP3蓝奏云下载 吴许越成原文及翻译 诗词名句鉴赏:我所思兮在太山,欲往从之梁父艰。
- 评论列表
-
- 添加评论