1. 算法描述
給定一個字符串和一個整數k, 從字符串首字符開始,每2k個字符,反轉前面k個字符。
(1)如果字符串長度小於k, 則反轉所有字符串;
(2)如果字符串長度小於2k並且大於或等於k,則反轉前面k個字符,剩餘字符保持原來順序。
例如:
Input: s = “abcdefg”, k = 2
Output: “bacdfeg”
2. 思想分析
(1)如果s.length() >= 2k, reverse前面k個字符串。
同時,將前2k個字符,累加到結果字符串;後2k個字符更新爲s, 用來進行下一次處理。
(2)如果s.length() >= k, reverse前面k個字符串。
將這k個字符串累加到結果中。
同時s清空,退出while循環。
(3)當s.length() < k,直接反轉所有字符。
3. 參考代碼
(個人leetcode算法均本着容易理解爲第一原則,儘量提升效率。)
class Solution {
public:
string reverseStr(string s, int k) {
string result;
while (s.length() >= k)
{
if (s.length() >= 2 * k)
{
reverse(s.begin(), s.begin() + k);
result += s.substr(0, 2 * k);
s = s.substr(2 * k);
}
else if (s.length() >= k)
{
reverse(s.begin(), s.begin() + k);
result += s;
s.clear();
}
}
reverse(s.begin(), s.end());
result += s;
return result;
}
};