541. Reverse String II
- 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]
class Solution {
public String reverseStr(String s, int k) {
char[] chars=s.toCharArray();
int time=s.length()/(2*k);
System.out.println(time);
char temp;
if(time>0){
for(int i=0;i<time;i++){//change ki ki+1 ki+2....ki+k-1
for(int x=0;x<(k/2);x++)
{
temp=chars[2*k*i+x];
chars[2*k*i+x]=chars[2*k*i+k-1-x];
chars[2*k*i+k-1-x]=temp;
}
}
}
//change 2k*time-1 2k*time...
int left=s.length()-2*k*time;//剩下的数组个数
//2k*time-1 2k*time .....2k*time+left-1
if(left<k){
for(int x=0;x<(left/2);x++){
temp=chars[2*k*time+x];
chars[2*k*time+x]=chars[2*k*time-1+left-x];
chars[2*k*time-1+left-x]=temp;
}
}else{//left>k
for(int x=0;x<(k/2);x++){
temp=chars[2*k*time+x];
chars[2*k*time+x]=chars[2*k*time-1+k-x];
chars[2*k*time-1+k-x]=temp;
}
}
return new String(chars);
}
}
improve
class Solution {
public String reverseStr(String s, int k) {
char[] chars=s.toCharArray();
int time=s.length()/(2*k);
if(time>0){
for(int i=0;i<time;i++){
chars=sort(chars,2*k*i,2*k*i+k-1);
}
}
int left=s.length()-2*k*time;
int e=left<k?left:k;
if(e>0){
chars=sort(chars,2*k*time,2*k*time+e-1);
}
return new String(chars);
}
public char[] sort(char[] chars,int s,int e){
//对chars[],start和end之间倒序
int l=e-s+1;
char temp;
for(int i=0;i<(l/2);i++){
temp=chars[s+i];
chars[s+i]=chars[e-i];
chars[e-i]=temp;
}
return chars;
}
}