## Saturday, May 13, 2017

### 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.
Link to Git HubCode

Example:

```Input: s = "abcdefg", k = 2
Output: "bacdfeg"
```

Restrictions:
1. The string consists of lower English letters only.
2. Length of the given string and k will in the range [1, 10000]
Solution
• Convert the string into a character array
• Find the min (i) and max(j) value for swapping based on k value.
int j=Math.min(i+k-1, n-1)
• Swap the elements

```package Algorithms.Strings;
/*
* Input: s = "abcdefg", k = 2
Output: "bacdfeg
*/
public class ReverseString2 {
public static String get(String s,int k)
{
//Convert the string in char array
char [] arr=s.toCharArray();
//Array length
int n=arr.length;
int i=0;
while(i<n){
int j=Math.min(i+k-1, n-1);
//Call the swap function
swap(arr,i,j);
//Increment the counter
i+=2*k;
}
//Convert character to string and return
return String.valueOf(arr);
}
private static void swap(char [] arr, int l, int r)
{
while(l<r)
{
//Store the first char as temp
char temp=arr[l];
//Swap the last element to the first element
arr[l++]=arr[r];
//Swap the first element from the temp to last element
arr[r--]=temp;
}
}

}
```

Iteration