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]
题意:给定一个字符串s和一个正数k,要求对字符串s每2k个字符中的前k个字符进行逆转;对于每一次需要逆转的字符串如果长度小于k的话,对所有字符进行逆转;如果长度大于或等于k,仅对前k个字符逆转;
解法:已经要求需要每2k个字符进行逆转,那么我们就可以每次截取2k个字符,已题目要求逆转相应的字符;
class Solution {
public String reverseStr(String s, int k) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length();) {
int strEnd = Math.min(s.length(), i + 2 * k);
String splitStr = s.substring(i, strEnd);
int reverseEnd = Math.min(splitStr.length() - 1, k - 1);
for (int j = reverseEnd; j >= 0; j--) {
result.append(splitStr.charAt(j));
}
for (int j = reverseEnd + 1; j < splitStr.length(); j++) {
result.append(splitStr.charAt(j));
}
i += 2 * k;
}
return result.toString();
}
}